我想使用TimeZone id获得GMT等价物 例如:
太平洋/斐济==>应该是GMT + 13,因为DST于2012年10月21日在Sun开始。 但相反,我得到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;
}
}
提前致谢! : - )
此致
RACS
答案 0 :(得分:3)
目前您的代码有点破碎,但根本问题在于您使用的是旧时区数据。
我无法确定现在发生变化的完全版本,但在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:)