【问题标题】:Changing date format from one to another in java在java中将日期格式从一种更改为另一种
【发布时间】:2014-09-04 10:46:56
【问题描述】:

我正在尝试将具有一个时区(例如 IST)的日期(日期对象)转换为 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());
    

它向我显示以下输出:

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

【问题讨论】:

  • java.util.Date 对象没有时区的概念,因此您不能将一个对象从一个时区转换到另一个时区。但是您可以在特定时区打印 Date - 这是您想要的吗?
  • 您好,我需要一个 GMT 格式的“日期”对象。 withZone 给出的输出与以下内容相同: System.out.println("date_UtcGmt : " + date_UtcGmt);
  • 嗨,邓肯,是的,在转换日期后,我希望在此处打印“GMT”而不是“IST”:“Thu Sep 04 15:49:50 IST 2014”。但我想要一个日期对象,因为我需要一个日期对象中的 GMT 时间才能进一步使用。
  • 所以像这个问题应该有帮助(或重复?):How do I display a date with a custom timezone?

标签: java date datetime


【解决方案1】:

您无法使用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

【讨论】:

    【解决方案2】:

    颤抖米木...

    a) 日期没有有时区,请阅读 javadoc。

    b) 日期的 toString() 方法打印出 JVM 时区中的内容,看在上帝的份上,不要为了日期转换而更改它。

    c) 您设置时区 GMT 并调用变量 UtcGmt。 GMT 和 UTC 不完全一样,而且它们都是时区,你特地设置为 GMT,那为什么名字里有 UTC?

    d) 您想在某个时区“展示”吗?在哪里?当您将其打印到控制台时?在网络应用程序中?桌面应用?一些框架具有自定义格式化程序,但如果您想自己格式化,请使用 SimpleDateFormat(或 Joda 提供的任何内容)。日期本身只是一个时间点,表示为 long,没有时区、语言、格式……

    【讨论】:

      【解决方案3】:

      我们可以设置默认时区来执行此操作。尝试如下:

      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
      

      【讨论】:

        猜你喜欢
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2019-11-10
        相关资源
        最近更新 更多