我正在尝试将带有一个时区(比如IST)的日期(Date对象)转换为GMT中的日期。但我得到的日期确实有更改的时间,但它显示的时区仍然是" IST"。我希望时区应显示为" GMT"。
我在尝试多次转换后使用了Date对象来获取最终日期,这给出了转换日期,但时区仍然是" IST"在输出中。
然后我尝试使用DateTime对象(Joda Time):
Date dateIndia = new Date();
DateTime dateTime = new DateTime(dateIndia);
DateTimeZone timeZone = DateTimeZone.forID("GMT");
DateTime date_UtcGmt = dateTime.toDateTime(timeZone);
System.out.println("dateIndia : " + dateIndia);
System.out.println("dateTime : " + dateTime);
System.out.println("date_UtcGmt : " + date_UtcGmt);
System.out.println("date_UtcGmt.toDate : " + date_UtcGmt.toDate());
它显示以下输出:
dateIndia : Thu Sep 04 15:49:50 IST 2014
dateTime : 2014-09-04T15:49:50.152+05:30
date_UtcGmt : 2014-09-04T10:19:50.152Z
date_UtcGmt.toDate : Thu Sep 04 15:49:50 IST 2014
现在我有GMT格式的date_UtcGmt但是当我将它转换为日期时,它再次采用IST格式。我想要一个日期对象,显示GMT作为其时区。我可以更改date_UtcGmt对象的显示格式吗?我该怎么办?
答案 0 :(得分:2)
使用java.util.Date
无法解决此问题。该类不存储时区,因此您必须在打印日期时进行时区操作。
使用Joda时间,您可以使用DateTime
和withZone()
获得所需的结果:
DateTime dt = new DateTime();
System.out.println(dt);
DateTime gmt = dt.withZone(DateTimeZone.forID("GMT"));
System.out.println(gmt);
对于我(在英国),这打印:
2014-09-04T12:16:33.357+01:00 2014-09-04T11:16:33.357Z
答案 1 :(得分:1)
颤抖mi timbers ...
a)日期不有时区,请阅读javadoc。
b)日期的toString()方法在JVM的时区中打印出东西,而对于上帝的爱,不会改变日期转换的内容。
c)设置时区GMT并调用变量UtcGmt。 GMT和UTC不完全相同,而且它们都是时区,你专门将它设置为GMT,那么为什么名称中包含UTC?
d)你想在某个时区“展示它”吗?哪里?当你打印到控制台?在Web应用程序中?桌面应用?一些框架具有自定义格式化程序,但如果您想自己格式化,请使用SimpleDateFormat(或Joda提供的任何内容)。日期本身仅仅是一个时间点,表示为没有时区,语言,格式的长...,
答案 2 :(得分:-1)
我们可以设置默认时区来执行此操作。试试如下:
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
System.out.println("date_UtcGmt.toDate : " + date_UtcGmt.toDate());
输出就像,
date_UtcGmt.toDate : Thu Sep 04 11:44:20 GMT 2014