java 最终对象 DateFormat 设置时区
java final object DateFormat set timezone
我在其他地方有一个数据库,我必须从另一个时区的数据库中获取数据。
要获取最新更新的元素,我需要将 Date
转换为数据库的时区,以便我只能在特定时间后更改行。
为了与数据库通信,我创建了一个包含各种 static final
元素的 Java class。我想添加一个 static final DateFormat
和一个 SimpleDateFormat
和一个 TimeZone
这样我就可以随时使用这个 FINAL DateFormat
将日期更改为数据库中任何地方的日期时间申请。
所以我有一个 class:
public class Data_DB {
static final DateFormat FORMATTER= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
我可以在我的应用程序中随处使用 DateFormat
,非常好。
但是我也想更改格式化程序的TimeZone
。
public class Data_DB {
static final DateFormat FORMATTERSD = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
static final DateFormat FORMATTERDB = FORMATTERSD.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"));
}
但是 FORMATTERSD.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"))
的 return 值无效。
我不想实例化 Data_DB
来添加 TimeZone
。
我可以用什么方法解决这个问题以获得一个我可以在应用程序中随处使用的静态最终元素 FORMATTERDB
?
你可以这样做:
static final DateFormat FORMATTERSD;
static {
FORMATTERSD = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
FORMATTERSD.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"));
}
静态将被调用一次。
请注意,SimpleDateFormat 不是线程安全的,如果你有多个线程,它就无法工作
请注意 SimpleDateFormat
不是线程安全的。所以两个线程可能同时改变静态对象的内部状态,玩乱七八糟。
也是最终对象,然后使用 setTimeZone
更改字段会 更改原始对象!
static DateFormat formatterSD() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
static DateFormat formatterDB() {
DateFormat df = formatterSD(); // Must be a *new* SimpleDateFormat.
df.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"));
return df;
}
和java 8来很多新的类。起初有点不知所措,但值得,
因为这些问题在那里得到解决。请参阅 LocalDateTime。
我在其他地方有一个数据库,我必须从另一个时区的数据库中获取数据。
要获取最新更新的元素,我需要将 Date
转换为数据库的时区,以便我只能在特定时间后更改行。
为了与数据库通信,我创建了一个包含各种 static final
元素的 Java class。我想添加一个 static final DateFormat
和一个 SimpleDateFormat
和一个 TimeZone
这样我就可以随时使用这个 FINAL DateFormat
将日期更改为数据库中任何地方的日期时间申请。
所以我有一个 class:
public class Data_DB {
static final DateFormat FORMATTER= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
我可以在我的应用程序中随处使用 DateFormat
,非常好。
但是我也想更改格式化程序的TimeZone
。
public class Data_DB {
static final DateFormat FORMATTERSD = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
static final DateFormat FORMATTERDB = FORMATTERSD.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"));
}
但是 FORMATTERSD.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"))
的 return 值无效。
我不想实例化 Data_DB
来添加 TimeZone
。
我可以用什么方法解决这个问题以获得一个我可以在应用程序中随处使用的静态最终元素 FORMATTERDB
?
你可以这样做:
static final DateFormat FORMATTERSD;
static {
FORMATTERSD = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
FORMATTERSD.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"));
}
静态将被调用一次。
请注意,SimpleDateFormat 不是线程安全的,如果你有多个线程,它就无法工作
请注意 SimpleDateFormat
不是线程安全的。所以两个线程可能同时改变静态对象的内部状态,玩乱七八糟。
也是最终对象,然后使用 setTimeZone
更改字段会 更改原始对象!
static DateFormat formatterSD() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
static DateFormat formatterDB() {
DateFormat df = formatterSD(); // Must be a *new* SimpleDateFormat.
df.setTimeZone(TimeZone.getTimeZone("XXXX/xxxx"));
return df;
}
和java 8来很多新的类。起初有点不知所措,但值得, 因为这些问题在那里得到解决。请参阅 LocalDateTime。