2010-11-18 27 views
8

Java是否有一些智能的日期/時間解析器庫?我的意思是,我不需要指定日期/時間格式。該API應該與此類似:Java的智能日期/時間解析器

Calendar cal = DateTimeParser.parse("01/06/10 14:55"); 
cal = DateTimeParser.parse("1 Jan 2009"); // assumes 00:00 time 
cal = DateTimeParser.parse("1.2.2010"); 
cal = DateTimeParser.parse("kygyutrtf"); // throws exception 

UPDATE

// I'm telling the parser: "If unsure, assume US date format" 
cal = DateTimeParser.parse("01/02/03", new Locale("en-us")); 
+3

沒有。 (15chrs ...) – Bozho 2010-11-18 15:08:38

+0

類似的問題:http://stackoverflow.com/questions/3850784/recognise-an-arbitrary-date-string – Joel 2010-11-18 15:17:39

+0

[解析Java中的任何日期](http:// stackoverflow。問題/ 3389348/parse-any-date-in-java) – nawfal 2014-01-30 06:59:06

回答

12

JodaTime是優秀的操控日期對象(例如date.plusDays(10))

...但JChronic是你想要的自然語言日期解析,例如

Chronic.parse("now") 
Chronic.parse("tomorrow 15:00") 
Chronic.parse("14/2/2001") 
Chronic.parse("yesterday") 
Chronic.parse("20 Jan 2010") 

您的問題類似於this one。

+2

「自然語言日期解析」!=「格式猜測日期解析」 – 2010-11-18 15:16:02

+0

否 - 但它在問題的上下文中仍然有用。 – Joel 2010-11-18 15:16:36

+0

這正是我正在尋找的,謝謝。 – fhucho 2010-11-18 15:36:37

3

沒有,沒有。 「01/02/03」應該返回什麼? 2003年1月1日,2001年2月3日或2001年3月2日?

+0

查看我的問題更新。 – fhucho 2010-11-18 15:24:36

+0

@fhucho'10/10/10'是2010年10月10日,如果將它視爲日/月/年的任何組合,則不考慮區域設置。解析器應該爲「08/09」做些什麼?對於我們,或2008年9月或2009年8月是8/9月/當年,還是會導致解析錯誤? – khachik 2010-11-18 15:39:18

+0

@khachik哦,你說得對,我會把問題編輯到01/02/03。至於08/09 - 它應該返回3個選項之一,並以某種方式表明它不確定結果。理想情況下,它應該類似於人類... – fhucho 2010-11-18 15:47:30

1

這是不可能的,或者至少是可靠的。

例如,字符串10/10/10代表什麼日期?

+1

我不需要100%的可靠性。對於這樣的情況,解析函數可能會將語言環境或語言作爲可選參數。 – fhucho 2010-11-18 15:18:43

2

好奇,你要調用智能,只是考慮這些:

  • 是您1.2.2010和我一樣?
  • 如果代碼在具有不同語言環境的不同時區上運行,會發生什麼情況?
  • 它應該遵循一些well established標準還是完全發明自己?

您的問題的答案是