JodaTime-如何获取UTC的当前时间

我想获取UTC的当前时间。我到目前为止所做的是(仅出于测试目的):

    DateTime dt = new DateTime();

DateTimeZone tz = DateTimeZone.getDefault();

LocalDateTime nowLocal = new LocalDateTime();

DateTime nowUTC = nowLocal.toDateTime(DateTimeZone.UTC);

Date d1 = nowLocal.toDate();

Date d2 = nowUTC.toDate();

L.d("tz: " + tz.toString());

L.d("local: " + d1.toString());

L.d("utc: " + d2.toString());

  • d1 是我的当地时间,那很好
  • d2 是我的本地时间+ 1,但应该是本地时间-1 …

我的本地时区是UTC + 1(根据调试输出和此处的列表:https : //www.joda.org/joda-

time/timezones.html)…

如何正确地从一个时区转换为另一个时区(包括毫秒表示)?

我需要日期/毫秒…这不是正确显示时间…。

现在,借助评论和答案,我尝试了以下操作:

    DateTimeZone tz = DateTimeZone.getDefault();

DateTime nowLocal = new DateTime();

LocalDateTime nowUTC = nowLocal.withZone(DateTimeZone.UTC).toLocalDateTime();

DateTime nowUTC2 = nowLocal.withZone(DateTimeZone.UTC);

Date dLocal = nowLocal.toDate();

Date dUTC = nowUTC.toDate();

Date dUTC2 = nowUTC2.toDate();

L.d(Temp.class, "------------------------");

L.d(Temp.class, "tz : " + tz.toString());

L.d(Temp.class, "local : " + nowLocal + " | " + dLocal.toString());

L.d(Temp.class, "utc : " + nowUTC + " | " + dUTC.toString()); // <= WORKING SOLUTION

L.d(Temp.class, "utc2 : " + nowUTC2 + " | " + dUTC2.toString());

输出值

tz    : Europe/Belgrade

local : 2015-01-02T15:31:38.241+01:00 | Fri Jan 02 15:31:38 MEZ 2015

utc : 2015-01-02T14:31:38.241 | Fri Jan 02 14:31:38 MEZ 2015

utc2 : 2015-01-02T14:31:38.241Z | Fri Jan 02 15:31:38 MEZ 2015

我想要的是,本地日期显示15点,而utc日期显示14点…现在,这似乎可行…

希望这是一个很好的解决方案…我想,我尊重我得到的所有小费…

    DateTimeZone tz = DateTimeZone.getDefault();

DateTime nowUTC = new DateTime(DateTimeZone.UTC);

DateTime nowLocal = nowUTC.withZone(tz);

// This will generate DIFFERENT Dates!!! As I want it!

Date dLocal = nowLocal.toLocalDateTime().toDate();

Date dUTC = nowUTC.toLocalDateTime().toDate();

L.d("tz : " + tz.toString());

L.d("local : " + nowLocal + " | " + dLocal.toString());

L.d("utc : " + nowUTC + " | " + dUTC.toString());

输出:

tz    : Europe/Belgrade

local : 2015-01-03T21:15:35.170+01:00 | Sat Jan 03 21:15:35 MEZ 2015

utc : 2015-01-03T20:15:35.170Z | Sat Jan 03 20:15:35 MEZ 2015

回答:

您正在使它变得比所需复杂得多:

DateTime dt = new DateTime(DateTimeZone.UTC);

完全不需要 转换 。如果您确实需要转换,可以使用withZone。我建议您 避免

通过LocalDateTime,因为那样会因时区转换而丢失信息(两个不同的时刻在同一时区中可能具有相同的本地时间,因为时钟会返回并重复本地时间。

综上所述,出于可测试性的考虑,我个人喜欢使用Clock允许我获取当前时间的接口(例如作为Instant)。然后,您可以在生产环境中运行时使用依赖项注入来注入实际系统时钟,并使用具有预设时间的假时钟来进行测试。Java

8的java.time软件包内置了这个想法,顺便说一句。

以上是 JodaTime-如何获取UTC的当前时间 的全部内容, 来源链接: utcz.com/qa/404774.html

回到顶部