java final object DateFormat set timezone



我在其他地方有一个数据库,我必须从另一个时区获取数据。

要获取最新更新的元素,我需要将Date转换为数据库的时区,以便我只能在特定时间后更改行。

为了与数据库进行通信,我创建了一个包含各种static final元素的 Java 类。我想添加一个带有SimpleDateFormatTimeZonestatic final DateFormat,以便我始终可以使用此 FINAL DateFormat将应用程序中任何位置的数据库的日期更改为日期时间。

所以我有一堂课:

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")) 的返回值为空。

我不想实例化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带来了许多新类。起初有点压倒性,但值得,因为这些问题在那里得到解决。请参阅本地日期时间。

最新更新