【问题标题】:How to parse times in Java? [closed]如何在 Java 中解析时间? [关闭]
【发布时间】:2012-09-29 01:14:20
【问题描述】:

我想知道 java 是否带有一种内置的方法来解析时间/日期,就像这样:

5m1w5d3h10m15s

5 个月 1 周 5 天 3 小时 10 分钟 15 秒。

【问题讨论】:

  • 你可以通过看电视或踢足球来打发时间吗?开玩笑!到目前为止,您都在哪里寻找解决方案?
  • 你这种输入的来源是什么?

标签: java parsing date datetime time


【解决方案1】:

您可能希望将其解析为一个时间段。而不是日期,除非您的输入看起来像“2012y10m8d”等。如果您尝试将一段时间表示为 java.util.Date,预计会遇到很多问题。相信我,我以前也曾走这条路。

请考虑将 Joda 时间用于时间段。详情见这个问题:How do I parse a string like "-8y5d" to a Period object in joda time

HumanTime 看起来也很有趣。

【讨论】:

    【解决方案2】:

    我不知道具体的格式...但我建议你看看this

    另外,构建自己的解析器也不会太难......

    【讨论】:

      【解决方案3】:

      是的,它叫做SimpleDateFormat,你只需要定义你的模式。

      由于您没有(自愿?)准确地说明年份,所以我添加了一个:

      DateFormat df = new SimpleDateFormat("M'm'W'w'F'd'H'h'm'm's's'yyyy");
      System.out.println(df.parse("5m1w5d3h10m15s"+"2012"));
      

      当然有一些可用的库(很多人重定向到 Joda,这比标准的和令人困惑的 java 库更好)但是你的问题是关于“如果 java 带有解析时间/日期的内置方法”,答案是肯定的。

      【讨论】:

      • 不要。这会将其解析为一个日期,该日期表示历史中的特定时间。 5个月是一个时间段,很不一样。
      • 问题表明它是关于“解析时间/日期”的。但我不确定这是否是 OP 的一个不好的措辞。实际上,如果真正的问题是关于持续时间,那么我的回答无济于事。但是……如果是关于持续时间,这个问题没有多大意义,因为月份的持续时间是可变的……
      • 关于持续时间可变的月份的有趣点!不过,它仍然可能是一个时间段,只是在没有先“锚定”它的情况下无法转换为毫秒。例如。 2012-10-08 + 5m1w5d3h10m15s 非常有意义。或 5m3w + 10m - 1m3w = 15m2w。
      • 是的。我的结论是OP没有充分考虑这个问题。这不是一个可以直接回答的问题。
      【解决方案4】:

      你可以参考这篇文章的想法: Java date format - including additional characters

      当然还有 SimpleDateFormat 类供参考。 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

      【讨论】:

        【解决方案5】:

        使用 SimpleDateFormatter 类将帮助您将字符串转换为日期。使用 Joda time PeriodFormatter 将允许您转换/表达一个时期而不是日期。例如。您将能够表达和解析类似:15m1w5d3h10m15s 的内容。

        【讨论】:

          【解决方案6】:

          我会先反转字符串。然后,我会将字符串标记为 6 个单独的数字部分——月、周、日、小时、分钟、秒。我将每个标记存储在一个数组中并分别处理每个元素:a[0] = 秒,a[1] = 分钟,... a[5] = 月。这是我能想到的最直观的方式,因为我不记得有任何图书馆为你做这件事。当然,您没有具体说明“解析”是什么意思。

          【讨论】:

            猜你喜欢
            • 2011-02-17
            • 2017-09-05
            • 1970-01-01
            • 2011-05-12
            • 1970-01-01
            • 1970-01-01
            • 2010-09-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多