2012-10-08 63 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] =月。這是我能想到的最直觀的方式,因爲我無法回想起任何爲你做這件事的圖書館。當然,你沒有詳細說明「解析」的含義。