为什么这个时区设置不正确?

时间:2014-06-22 22:08:42

标签: java android timezone

鉴于以下(Android)代码:

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTimeZone().toString());
cal.setTimeZone(TimeZone.getTimeZone("America/New York"));
System.out.println(cal.getTimeZone().toString());

我得到以下输出:

sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

为什么我的America\New York时区没有设置?

2 个答案:

答案 0 :(得分:3)

试试这个:cal.setTimeZone(TimeZone.getTimeZone("America/New_York"));
还不完全确定,但我认为错误的时区ID可能是你的问题。

另请参阅:http://tutorials.jenkov.com/java-date-time/java-util-timezone.html

答案 1 :(得分:1)

accepted answer is correct.问题似乎不正确time zone name

约达时间

仅供参考,这是Joda-Time中的相同代码。在Joda-Time中,与java.util.Date对象不同,DateTime对象知道自己分配的时区。

DateTimeZone timeZone = DateTimeZone.forID( "America/New_York" );
DateTime now = DateTime.now( timeZone );

如果需要,请调整为UTC。

DateTime dateTimeUtc = now.withZone( DateTimeZone.UTC );

如果需要,可以转换为java.util.Date以与其他类一起使用。

java.util.Date date = dateTime.toDate();