gpt4 book ai didi

Java - 在任何时区将当前日期转换为 UTC 和 UTC

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:17 26 4
gpt4 key购买 nike

我需要两件事:

  1. 将当前时间转换为 UTC(这样我就可以以 UTC 格式存储日期)--> result = java.util.Date.

  2. 将加载日期(UTC 格式)转换为任何时区 --> result =java.util.Date 或毫秒

对于这两点,请牢记日光。

1)我在 stackoverflow 上发现了以下内容:

Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());

TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;

System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);

c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));

System.out.println("GMT Time: "+c.getTime());

--> 结果等于 UTC?

2)

public static long getTimeMillisFromTimeZone(long utcTimeMillis,
String timeZoneId) {
System.out.println("input millis: " + utcTimeMillis);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
calendar.setTimeInMillis(utcTimeMillis);
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone(timeZoneId);

calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, calendar.getTimeZone()
.getDSTSavings() * -1);
}

calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());

System.out.println("output millis: " + calendar.getTime().getTime());
return calendar.getTime().getTime();
}

--> 我在那里遇到了问题 --> 损失了 1 小时!

在我的示例中,我将来自时区“欧洲/维也纳”(使用日光)的日期作为 utc 存储到数据库中。欧罗巴/维也纳 --> 10:00协调世界时 --> 09:00

现在我想将此 UTC (09:00) 转换为“Europe/Vienna”,我得到:09:00 = I lost an hour..

最佳答案

您是否考虑过使用现有的 DateTime API,例如 Joda

更新

  1. 已回答:Joda Time - different between timezones

  2. 会是一样的,我猜只是使用 withZone

关于Java - 在任何时区将当前日期转换为 UTC 和 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622841/

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