2016-04-11 119 views
0

您好目前我正在尋找解析在常規日期/ JAVA的Java解析日期

格式爲「2003年6月13」(沒有這麼奇特的!!!)

簡單瞭解一下http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html給我一些線索

月:如果模式字母的數量是3或更多,則該月被解釋爲文本;否則,它被解釋爲一個數字。

年份:如果模式字母的數量大於2,則年份照字面解釋

所以我猜想,「MMMM d yyyy」則由精 但是,即使嘗試其他模式:「MMM d YYYY」, 「M d YYYY」, 「MMM DD YYYY」,他們沒有工作.......

Date dateParsed = new SimpleDateFormat("MMMM d yyyy").parse("June 13 2003") 
    println dateParsed 

給我一個例外:

Exception in thread "main" java.text.ParseException: Unparseable date: "June 13 2003" 
+0

可能重複的[Unparseable date:「Fri Oct 10 23:11:07 IST 2014」(at offset 20)](http://stackoverflow.com/questions/27375489/unparseable-date-fri-oct-10 -231107-ist-2014-at-offset-20) –

回答

3

您的格式應該工作,問題可能是區域設置 - 如果您的系統默認情況下不是英文區域設置,它會嘗試解析您的本地月份名稱,而不是英文變種。

嘗試

new SimpleDateFormat("MMMM dd yyyy", java.util.Locale.ENGLISH) 
+0

謝謝!!!很好的答案 – julienasefth

0
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class test { 
    public static void main(String[] args) throws ParseException { 
     Date dateParsed = new SimpleDateFormat("MMMM d yyyy").parse("June 13 2003"); 
     System.out.println(dateParsed); 
    } 
} 

這對我來說很好。打印週五6月13日00:00:00 EEST 2003

+0

謝謝你的測試! :) – julienasefth

0

TL;博士

LocalDate.parse( 
    "June 13 2003" , 
    DateTimeFormatter.ofPattern("MMMM d uuuu") 
        .withLocale(Locale.US) 
) 

java.time

現代化的方法是使用java.time類。

LocalDate類代表沒有時間和沒有時區的僅有日期的值。

使用DateTimeFormatter解析格式不爲ISO 8601的字符串。關鍵部分是指定Locale來確定在翻譯月份名稱時使用的人類語言,英語是這種情況。

DateTimeFormatter f = DateTimeFormatter.ofPattern("MMMM d uuuu") ; 
f = f.withLocale(Locale.UK); // Or Locale.US, or Locale.ENGLISH, or Locale.CANADA_FRENCH, whatever matches your inputs. 
LocalDate ld = LocalDate.parse("June 13 2003" , f) ; 

2003-06-13

See code in action, in IdeOne.com


關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore