【问题标题】:How can I correctly parse this kind of date?我怎样才能正确解析这种日期?
【发布时间】:2015-03-04 15:49:05
【问题描述】:

我无法为我的日期找到正确且干净的工作解决方案,其格式如下:

201406082159

(6 月 8 日,这里 21:59)

我最后一次尝试是这样的:

SimpleDateFormat format2 = new SimpleDateFormat("YYYYMMDDHHMM", Locale.ENGLISH); 

遗憾的是它无法正常工作并打印出来

Sun Dec 29 21:00:00 CET 2013

【问题讨论】:

    标签: java date date-format simpledateformat


    【解决方案1】:

    分钟由m 而非M 设置

    年份由y 而非Y 设置

    天(月)由d而不是D(年)设置

    SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMddHHmm", Locale.ENGLISH); 
    

    Source

    【讨论】:

    • 啊,谢谢,就是这样!像经常一样,我几乎得到了它:-)
    • D 是一年中的一天。 d 是一个月中的一天。
    • 我也认为应该是 CEST 2014 而不是 CET 2014。有可能得到它吗?
    • CEST 与 CET 的含义不同 (en.wikipedia.org/wiki/List_of_time_zone_abbreviations) 您可能实际上想要英国夏令时 (BST),这在某种意义上等同于 CET,因为它们都是 UTC+01
    • 进一步说明 - 时区缩写(CET、BST、GMT)等取决于您使用代码的计算机的设置。例如。使用上面的代码解析给定日期时,我的计算机将输出Sun Jun 08 21:59:00 BST 2014。如果字符串是 "201401082159",它会给出 Wed Jan 08 21:59:00 GMT 2014 注意 - 这与 Locale.ENGLISH 无关,起初可能会令人困惑......
    【解决方案2】:

    我建议看看 SimpleDateFormat 类的 api。

    http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

    它将帮助您解决当前的问题,如果您有不同的日期格式要解析,您将来肯定能够找到正确的模式。

    【讨论】:

      【解决方案3】:

      您正在使用过时的遗留类。为您的日期时间工作使用 java.time 类。

      DateTimeFormatter

      定义格式化模式。

      String input = "201406082159";
      DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMddHHmm" );
      

      LocalDateTime

      您的输入缺少有关任何与 UTC 或时区的偏移量的信息。所以我们解析为LocalDateTime

      LocalDateTime ldt = LocalDateTime.parse( input , f );
      

      ZonedDateTime

      如果您知道数据的上下文指向某个时区,请应用它。指定proper time zone name。切勿使用 3-4 个字母的缩写,例如 CETESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

      ZoneId zoneId = ZoneId.of( "Europe/Paris" );
      ZonedDateTime zdt = ldt.atZone( zoneId );
      

      关于java.time

      java.time 框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date.Calendarjava.text.SimpleDateFormat

      Joda-Time 项目现在位于maintenance mode,建议迁移到 java.time。

      要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。

      大部分 java.time 功能在ThreeTen-Backport 中向后移植到Java 6 和7,并进一步适应ThreeTenABP 中的Android

      ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        • 2021-09-24
        相关资源
        最近更新 更多