【问题标题】:TimeZone Conversion with SimpleDateFormat in JavaJava 中使用 SimpleDateFormat 进行时区转换
【发布时间】:2013-11-09 20:02:54
【问题描述】:

我有一个以这种方式解析的 SimpleDateFormat 解析器:

sdf = new java.text.SimpleDateFormat("yyyy-MM-DD HH:mm:ss z").parse("2013-10-25 17:35:14 EDT");

log.debug(sdf);

这给了我2013 年 1 月 26 日星期六 03:05:14 IST

我在这里错过了什么?

【问题讨论】:

  • 为什么是javascript标签?
  • 它在您的计算机中提供时间。我想我不明白这个问题。你期望的输出是什么?
  • 我很确定那里是DD - 请参阅SimpleDateFormat。应该是dd
  • 您获得了IST 时间,因为Date 没有关于TimeZone 的详细信息。它只是 Epoch 以来时间的表示。看看this questionJon Skeet answer

标签: java simpledateformat


【解决方案1】:

首先,DD 代表 day in year,你应该用 dd 代替。

另外,如果要以特定格式打印日期,则需要使用两个SimpleDateFormats。

SimpleDateFormat.parse 返回一个Date 对象,表示您以给定格式指定的日期。

Date 对象本身保存为常规的Date没有附加格式

如果要以特定格式打印,需要使用另一个SimpleDateFormat,并调用format方法。

【讨论】:

    【解决方案2】:

    你应该使用格式

    SimpleDateFormat sdf1 =  new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:SS z");
    String sdf = sdf1.format(sdf1.parse("2013-10-25 17:35:14 EDT"));
    

    【讨论】:

      【解决方案3】:

      有两件事。

      sdfDate 的一个对象,它代表一个特定的瞬间(自另一个称为“纪元”的瞬间以来经过的毫秒数)。该对象没有已知的格式。这个对象的打印方式完全由其类的toString 方法处理,该方法以这种格式打印日期:

      dow mon dd hh:mm:ss zzz yyyy
      

      这正是您在输出中看到的。请注意,在这种情况下会打印运行程序的机器的时区。如果您希望以您选择的格式打印此对象,您应该使用DateFormat。要获取特定时区的输出,您必须明确将其告知DateFormat 对象(见下文)。

      另一件事是您应该在模式中使用dd 而不是DDD 是一年中的一天,d 是一个月中的一天,我相信这就是你想要的。现在牢记这两点,这是您问题的解决方案之一:

      DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
      sdf.setTimeZone(TimeZone.getTimeZone("EDT")); // Time Zone for output
      Date d = sdf.parse("2013-10-25 17:35:14 EDT");
      System.out.println(sdf.format(d)); // You need format method
      

      哪个输出:

      2013-10-25 17:35:14 EDT
      

      【讨论】:

        【解决方案4】:

        人们没有回答到这里更多的是问题:

        2013-10-25 17:35:14 EDT != Sat Jan 26 03:05:14 IST 2013
        

        我认为这是因为“EDT”是时区,因此,当 EDT 是 17:35 时,英国是 3:05,忽略夏令时调整。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-07
          • 1970-01-01
          • 2015-08-05
          • 2015-02-16
          • 1970-01-01
          • 2018-06-25
          相关资源
          最近更新 更多