我想知道java是否带有一种内置的方法来解析像这样的时间/日期:
5m1w5d3h10m15s
这是 5 个月 1 周 5 天 3 小时 10 分钟 15 秒。
是的,它叫做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 带有内置的方法来解析时间/日期”,答案是一个明确的是的。
您可能希望将其解析为一个时间段。而不是日期,除非您的输入看起来像“2012y10m8d”等。如果您尝试将一段时间表示为 java.util.Date,预计会遇到很多问题。相信我,我以前也走这条路。
而是考虑将 Joda 时间用于时间段。有关详细信息,请参阅此问题:How do I parse a string like "-8y5d" to a Period object in joda time
HumanTime看起来也很有趣。
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."
我不知道那种具体的格式......但我建议你看看这个
另外,构建自己的解析器也不会太难......
您可以参考这篇文章获取想法: Java 日期格式 - 包括附加字符
当然还有 SimpleDateFormat 类供参考。 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
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.