在java中将日期格式从一个更改为另一个

时间:2014-09-04 10:46:56

标签: java date datetime

我正在尝试将带有一个时区(比如IST)的日期(Date对象)转换为GMT中的日期。但我得到的日期确实有更改的时间,但它显示的时区仍然是" IST"。我希望时区应显示为" GMT"。

  1. 我在尝试多次转换后使用了Date对象来获取最终日期,这给出了转换日期,但时区仍然是" IST"在输出中。

  2. 然后我尝试使用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());
    
  3. 它显示以下输出:

        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对象的显示格式吗?我该怎么办?

3 个答案:

答案 0 :(得分:2)

使用java.util.Date无法解决此问题。该类不存储时区,因此您必须在打印日期时进行时区操作。

使用Joda时间,您可以使用DateTimewithZone()获得所需的结果:

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