繁体   English   中英

java最终对象DateFormat设置时区

[英]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带来了许多新类。 起初有点不知所措,但值得一提,因为在那里解决了这些问题。 请参阅LocalDateTime。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM