我正在尝试将日历对象设置为GMT,但getTime()始终以GMT + 1(我当前时间)返回时间。我试过了:
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("skeniver"));
他们显然都回归GMT,因为
cal.getTimeZone().getDisplayName()
返回“GMT + 00:00”;但
cal.getTime().toString();
始终以GMT + 1显示时间。
有谁知道为什么会这样?
答案 0 :(得分:1)
您需要调整夏令时。我不确定这是否会有所帮助,但是我用它来调整当前世界各地正在使用的应用中的任何时区为UTC的代码。我使用Date
代替Calendar
,但它有效......
Date dateTimeNow = new Date();
TimeZone tz = TimeZone.getDefault();
int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(dateTimeNow) ? tz.getDSTSavings() : 0);
Date dateTimeNowUTC = new Date(dateTimeNow.getTime() - currentOffsetFromUTC);
答案 1 :(得分:0)
如果你想在字符串中,那么更喜欢这个
的DateFormat或SimpleDateFormat这是示例
SimpleDateFormat sdf = new SimpleDateFormat(); // here you can also define your format of date for e.g. "dd/MM/yyyy z"
sdf.setTimeZone("GMT");
Calendar cal = Calendar.getInstance();
System.out.println(sdf.format(cal.getTime()));
答案 2 :(得分:0)
Calendar.getTime()
会返回Date
个对象。在Java中,Date
只是从UNIX时代开始的长时间戳的持有者。
要以与默认值不同的Date
显示TimeZone
,您可以使用SimpleDateFormat
。