日历未返回 GMT
Posted
技术标签:
【中文标题】日历未返回 GMT【英文标题】:Calendar not returning GMT 【发布时间】:2011-12-14 19:03:54 【问题描述】:我正在尝试将日历对象设置为 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"));
他们显然都返回格林威治标准时间,因为
cal.getTimeZone().getDisplayName()
返回“GMT+00:00”;但是
cal.getTime().toString();
始终以 GMT+1 显示时间。
有人知道为什么会这样吗?
【问题讨论】:
【参考方案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);
【讨论】:
【参考方案2】:如果你想输入字符串,那么更喜欢 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()));
【讨论】:
【参考方案3】:Calendar.getTime()
返回一个Date
对象。在 Java 中,Date
只是从 UNIX 纪元开始的长时间戳的持有者。
要以不同于默认的TimeZone
显示Date
,您可以使用SimpleDateFormat
。
【讨论】:
以上是关于日历未返回 GMT的主要内容,如果未能解决你的问题,请参考以下文章