【问题标题】:How to transfer this string to dateformat如何将此字符串转换为 dateformat
【发布时间】:2011-12-22 10:53:30
【问题描述】:

我尝试使用 SimpleDateFormat 来完成这项工作, 但我不知道如何处理字符串“2008-08-01T15:47:00.557”中的 T,谁能帮我解决这个问题?

【问题讨论】:

    标签: java date-format


    【解决方案1】:

    您需要使用格式“yyyy-MM-dd'T'hh:mm:ss.SSS”。

    在附加说明中,如果您尝试处理 xml 日期,请查看以下问题:Convert Java Date into XML Date Format (and vice versa)

    【讨论】:

      【解决方案2】:

      我不太确定。但是,如果我没记错的话,您必须在格式中用单引号将 T 括起来。

      String yourFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
      

      【讨论】:

      • @faz:太好了。我看你是新来的。当某个答案对您有所帮助时,您可以通过单击答案左侧的勾号来接受该答案。这样,问题就会被标记为已关闭,并且回答者会因给出的答案而获得奖励。
      【解决方案3】:

      因为您的示例是 24H 格式,而不是 AM/PM 格式

      你应该使用 HH(大写)而不是 hh

      喜欢这个

      String EXT_JS_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
      

      【讨论】:

        【解决方案4】:

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");

        API 中几乎给出了这个确切的示例,请查看 :-) http://download.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

        【讨论】:

          【解决方案5】:

          ISO 8601

          您的字符串格式恰好符​​合ISO 8601 标准。

          java.time

          Java 8 及更高版本包含 java.time 框架以取代问题和其他答案中使用的旧日期时间类。

          新类在解析/生成字符串时默认使用 ISO 8601 标准。所以无需指定编码格式模式

          时区

          您的输入字符串缺少任何时区或offset-from-UTC。因此,您必须指定此字符串有意义的时区。如果您不指定,解析会自动应用您的 JVM 当前的默认时区。不好,因为该默认值可能不是用于您的字符串的区域。此外,JVM 的默认值可以随时更改,即使在运行时也是如此。

          如果 UTC

          如果您的字符串用于 UTC 作为时区,只需附加一个 Z(“Zulu”的缩写,表示 UTC)。然后解析为Instant,UTC 时间线上的一个时刻。

          String input = "2008-08-01T15:47:00.557";
          Instant instant = Instant.parse ( input + "Z" );
          

          转储到控制台。

          System.out.println ( "instant: " + instant );
          

          即时:2008-08-01T15:47:00.557Z

          如果时区

          如果您的字符串用于其他时区,我们需要指定。使用正确的时区名称(切勿使用媒体上看到的 3-4 个字母代码)。这里我们随意选择蒙特利尔时区。

          对于格式化模式,我们使用 ISO 8601 的预定义格式之一:DateTimeFormatter.ISO_LOCAL_DATE_TIME(“LOCAL”表示输入字符串中没有嵌入时区或偏移量)。

          String input = "2008-08-01T15:47:00.557";
          ZoneId zoneId = ZoneId.of ( "America/Montreal" );
          DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
          formatter = formatter.withZone ( zoneId );
          ZonedDateTime zdt = ZonedDateTime.parse ( input , formatter );
          

          转储到控制台。我们还从ZonedDateTime 中提取Instant,以便您可以在UTC 中看到同一时刻。通常最好在您的业务逻辑中使用 UTC;只应用一个时区输出给用户。

          System.out.println ( "input: " + input + " | zdt: " + zdt + " | instant of zdt: " + zdt.toInstant () );
          

          输入:2008-08-01T15:47:00.557 | zdt: 2008-08-01T15:47:00.557-04:00[美国/蒙特利尔] | zdt 瞬间:2008-08-01T19:47:00.557Z

          【讨论】:

            猜你喜欢
            • 2015-12-11
            • 2021-11-18
            • 2015-05-10
            • 2017-02-10
            • 2014-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多