鉴于以下(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
时区没有设置?
答案 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();