gpt4 book ai didi

java - 如何使用时区 ID 获得 GMT 等效值

转载 作者:行者123 更新时间:2023-12-04 05:19:31 27 4
gpt4 key购买 nike

我想使用 TimeZone id 获得 GMT 等效值
示例:

Pacific/Fiji ==> 应该是 GMT+13,因为夏令时开始于 2012 年 10 月 21 日星期日。
但相反,我得到了 GMT+12。

下面是我的代码:

public static void main(String[] args){

String m_utcDatePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS";
String pnrCreation = "2012-12-10T01:14:22.000";

Calendar calendar = convertDateStringToCalendar(pnrCreation, m_utcDatePattern);

double offset = TimeZone.getTimeZone("Pacific/Fiji").getOffset(calendar.getTimeInMillis())/(60*60*1000.0);

System.out.println("GMT+" + (int) offset); //result is GMT+12, it should be GMT+13
}


//Date String to Calendar
public static Calendar convertDateStringToCalendar(String value, String fromPattern)
{
Calendar calendar;

if (value == null)
{
return null;
}
else
{
DateFormat dateFormat = new SimpleDateFormat(fromPattern);
Date date;
try
{
date = dateFormat.parse(value);
calendar = Calendar.getInstance();
calendar.setTime(date);
}
catch (ParseException e)
{
return null;
}

return calendar;
}

}

提前致谢! :-)

问候,

拉克斯

最佳答案

无论如何,您的代码目前有点损坏,但根本问题是您使用的是旧时区数据。

我现在无法确定更改的确切版本,但在 TZDB 2012e 版本中,斐济有一条规则:

Rule    Fiji    2012    only    -   Jan 22  3:00    0   -

在 2012h 版本中,它具有:
Rule    Fiji    2012    max -   Jan Sun>=18 3:00    0   -

(以及其他适当的更改。)

我相信斐济会放弃夏令时,但最终还是决定保留它们。

我不知道更新“普通”Java 的时区数据库有多容易 - 我建议你使用 Joda Time相反,它允许您使用来自最新数据的本地构建版本。它也是一个更干净的 API :)

关于java - 如何使用时区 ID 获得 GMT 等效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13820074/

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