3

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

5m1w5d3h10m15s

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

4

6 回答 6

9

是的,它叫做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 带有内置的方法来解析时间/日期”,答案是一个明确的是的。

于 2012-10-08T18:52:23.237 回答
2

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

而是考虑将 Joda 时间用于时间段。有关详细信息,请参阅此问题:How do I parse a string like "-8y5d" to a Period object in joda time

HumanTime看起来也很有趣。

于 2012-10-08T18:50:08.863 回答
1

I would first reverse the string. Then, I would tokenize the string into 6 numeric, separate parts -- months, weeks, days, hours, minutes, seconds. I'd store each token in an array and treat each element separately: a[0] = seconds, a[1] = minutes, ... a[5] = months. That's the most intuitive way I can think of offhand since I can't recall any library that does this for you. And of course, you didn't specify what you mean by "parse."

于 2012-10-08T19:02:42.903 回答
0

我不知道那种具体的格式......但我建议你看看这个

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

于 2012-10-08T18:51:07.960 回答
0

您可以参考这篇文章获取想法: Java 日期格式 - 包括附加字符

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

于 2012-10-08T18:54:29.537 回答
0

Using SimpleDateFormatter class will help you convert your string into a date. Using Joda time PeriodFormatter will allow you convert/express a period instead of a date. Eg. you will be able to express and parse something like: 15m1w5d3h10m15s too.

于 2012-10-08T18:56:57.163 回答