将默认日期时间区域设置为UTC以适用于Jodatime的DateTime

55

我目前正在使用当前的惯用语来创建UTC日期时间对象。

DateTime now = new DateTime(DateTimeZone.UTC);

有没有一种方式可以设置默认值,使得我可以使用默认构造函数创建基于UTC的DateTime对象,以便更加隐式?

DateTime now = new DateTime();
2个回答

71

如果你只想设置joda time的默认时区,请使用DateTimeZone.setDefault方法。


如果你想改变整个jvm使用的时区,请使用TimeZone.setDefault方法。请确保尽早设置它,因为它可以被joda time缓存。引用自DateTimeZone.getDefault

默认时区派生自系统属性user.timezone。如果该属性为null或不是有效标识符,则转换JDK TimeZone默认值。如果失败,则使用UTC。


9
请注意,这将影响整个 JVM,这可能是 OP 想要的,也可能不是。 - jtahlborn
4
如何仅为joda time(DateTimeZone.setDefault)设置时区。 - dacwe
5
我想强调jtahlborn所说的警告。TimeZone.setDefault会影响同一JVM中所有应用程序的每个线程。调用此方法可能会在其他类中创建各种混乱和意外行为。 - Basil Bourque
1
感谢指出 DateTimeZone.setDefault。将服务器设置为UTC时区可以简化操作。MongoDB最好能够使这些操作更加简单。 - akauppi

15

如果您真的担心多余的字符,那么只需创建一个帮助方法:

public static DateTime newUTCDateTime() {
  return new DateTime(DateTimeZone.UTC);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接