gpt4 book ai didi

java - Joda Time 将 time zoneddatetime 转换为毫秒

转载 作者:IT老高 更新时间:2023-10-28 20:47:25 27 4
gpt4 key购买 nike

有人可以向我解释为什么当我尝试获取具有与我自己不同的区域的 DateTime 的毫秒数时,它会返回我本地机器时区的毫秒数吗?我希望获得 UTC 的毫秒数,但我的应用程序的本地设置设置为 EST(即使我实际上在爱尔兰;))

代码如下:

  DateTimeFormatter format = DateTimeFormat.mediumDateTime();

DateTime local = new DateTime();
DateTime utc = new DateTime(System.currentTimeMillis(), DateTimeZone.UTC);
System.out.println("utc zone = " +utc.getZone());
System.out.println("UTC time: " + utc);
long current = utc.getMillis();

System.out.println("current: " + format.print(current));
System.out.println("local: " + format.print(local.getMillis()));

这是打印的内容:

 utc zone = UTC
UTC time: 2013-08-16T13:36:32.444Z
current: Aug 16, 2013 9:36:32 AM
local: Aug 16, 2013 9:36:32 AM

目前,我认为它应该与 UTC 时间具有相同的日期时间?

最佳答案

几点:

  • 您无需调用 System.currentTimeMillis()。只要通过这个:
    DateTime utc = new DateTime(DateTimeZone.UTC);
  • 当您调用 .getMillis() 时,结果是 总是,采用 UTC。将时间表示为不基于 UTC 的整数是一个坏主意,而且 Joda Time 不会提供。您认为毫秒受您本地时区影响的评估不正确。

  • 转换错误是因为您调用 format.print 的方式。当您传递一个整数时,默认行为是使用当前时区,即您的本地时间。你可以这样改变它:

    format.withZone(DateTimeZone.UTC).print(current)
  • 但是,如果打算将其打印为日期字符串,为什么还要先到毫秒呢?如果您传递原始的DateTime,则将自动应用其时区信息。
    format.print(utc)
format.print(local)

放在一起,整个事情看起来像这样:

DateTime local = new DateTime();
DateTime utc = new DateTime(DateTimeZone.UTC);

System.out.println("local zone = " + local.getZone());
System.out.println(" utc zone = " + utc.getZone());

DateTimeFormatter format = DateTimeFormat.mediumDateTime();
System.out.println(" local: " + format.print(local));
System.out.println(" utc: " + format.print(utc));
System.out.println("millis: " + utc.getMillis());

关于java - Joda Time 将 time zoneddatetime 转换为毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18274902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com