2012-10-08 26 views
3

我在想,如果Java配套提供了一个内置的方法来分析的时间/日期像这样的:如何解析Java中的时间?

5m1w5d3h10m15s 

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

+0

你可以通过看电视或踢足球来消磨时间吗?开玩笑!你到底在哪里寻找解决方案? – CKing

+0

这种输入的来源是什么? – Vikdor

回答

9

是,它被称为SimpleDateFormat,你只需要定义你的模式。

当你没有(?voluntarly)一年准确,我增加了一个:

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

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

+1

不要。这将解析成日期,这是为了表示历史上的特定时间。 5个月是一段时间,这是非常不同的。 – johv

+0

这个问题表明它是关于“解析时间/日期”的。但我不确定这不是来自OP的糟糕措辞。如果真正的问题实际上是关于持续时间的话,我的回答是无济于事的。但是,如果这是关于持续时间的问题没有多大意义,因为月份有一个可变的持续时间...... –

+0

关于月份的有趣点有不同的持续时间!它可能仍然是一段时间,但如果不先“锚定”它,则不能转换为毫秒。例如。 2012-10-08 + 5m1w5d3h10m15s非常有意义。或5m3w + 10m - 1m3w = 15m2w。 – johv

2

您可能想要将其解析为一段时间。而不是日期,除非您的输入看起来像“2012y10m8d”等。如果您尝试将一段时间表示为java.util.Date,则会遇到许多问题。相信我,我之前一直在走这条路。

请考虑在时间段内使用Joda时间。看到这个问题的细节:How do I parse a string like "-8y5d" to a Period object in joda time

HumanTime看起来也很有趣。

0

我不知道该特定格式...但我建议你看一看this

也不会太难建立你自己的解析器...

0

使用SimpleDateFormatter类将帮助您将字符串转换为日期。使用乔达时间PeriodFormatter将允许您转换/表示一段时间而不是日期。例如。你将能够表达和解析如:15m1w5d3h10m15s

1

我会先倒转字符串。然后,我会将字符串标记为6个数字分开的部分 - 几个月,几周,几天,几小时,几分钟,几秒。我会将每个令牌存储在一个数组中,并分别对待每个元素:a [0] =秒,a [1] =分钟,... a [5] =月。这是我能想到的最直观的方式,因为我无法回想起任何为你做这件事的图书馆。当然,你没有详细说明“解析”的含义。