用Java將「 2010年1月2日」格式的String
轉換爲Date
的最佳方法是什麼? html
最終,我想將月份,日期和年份分解爲整數,以即可以使用 java
Date date = new Date(); date.setMonth().. date.setYear().. date.setDay().. date.setlong currentTime = date.getTime();
將日期轉換爲時間。 api
並且,某些客戶端技術(例如GWT )不提供SimpleDateFormat。 安全
選擇Calendar.getInstance()是個好主意,您的要求是比較兩個日期。 長時間約會。 oracle
String str_date = "11-June-07"; DateFormat formatter; Date date; formatter = new SimpleDateFormat("dd-MMM-yy"); date = formatter.parse(str_date);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date; try { date = dateFormat.parse("2013-12-4"); System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013 String output = dateFormat.format(date); System.out.println(output); // 2013-12-04 } catch (ParseException e) { e.printStackTrace(); }
這對我來講能夠。 框架
儘管某些答案在技術上是正確的,但不建議這樣作。 ide
有關Joda-Time的一些注意事項以下。 spa
在Joda-Time中 , DateTime對象真正知道其本身分配的時區。 這與java.util.Date類造成了對比,後者彷佛有一個時區,但沒有。 線程
請注意,在下面的示例代碼中,咱們如何將時區對象傳遞給解析字符串的格式化程序。 該時區用於將日期時間解釋爲發生在該時區中。 所以,您須要考慮並肯定該字符串輸入所表明的時區。 設計
因爲輸入字符串中沒有時間部分,所以Joda-Time會將指定時區中一天的第一時刻指定爲一天中的時間。 因爲夏令時(DST)或其餘異常,一般這表示00:00:00
但並不是老是如此。 順便說一句,您能夠經過調用withTimeAtStartOfDay
對任何DateTime實例執行相同的withTimeAtStartOfDay
。
在Joda-Time中,格式化程序模式中使用的字符與java.util.Date/Calendar中的字符類似,但並不徹底相同。 仔細閱讀文檔。
咱們一般在Joda-Time中使用不可變的類。 而不是修改現有的Date-Time對象,咱們調用的方法是基於另外一個對象建立一個新的新實例,並複製了大多數方面,除非須要進行更改。 下面的最後一行是對withZone
的調用。 不變性有助於使Joda-Time很是線程安全,還可使某些工做更加清晰。
您將須要java.util.Date對象,以與其餘不瞭解Joda-Time對象的類/框架一塊兒使用。 幸運的是,來回移動很是容易。
從java.util.Date對象(此處稱爲date
)到Joda-Time DateTime…
org.joda.time.DateTime dateTime = new DateTime( date, timeZone );
從Joda-Time轉到java.util.Date對象的另外一方向…
java.util.Date date = dateTime.toDate();
String input = "January 2, 2010"; java.util.Locale locale = java.util.Locale.US; DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example. DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale ); DateTime dateTime = formatter.parseDateTime( input ); System.out.println( "dateTime: " + dateTime ); System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );
運行時...
dateTime: 2010-01-02T00:00:00.000-10:00 dateTime in UTC/GMT: 2010-01-02T10:00:00.000Z
使用Java 8,咱們得到了一個新的日期/時間API( JSR 310 )。
可使用如下方式在Java 8中解析日期,而無需依賴Joda-Time :
String str = "January 2nd, 2010";
// if we 2nd even we have changed in pattern also it is not working please workout with 2nd DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH); LocalDate date = LocalDate.parse(str, formatter);
// access date fields int year = date.getYear(); // 2010 int day = date.getDayOfMonth(); // 2 Month month = date.getMonth(); // JANUARY int monthAsInt = month.getValue(); // 1
LocalDate是用於表示日期(無時間)的標準Java 8類。 若是要解析包含日期和時間信息的值,則應使用LocalDateTime 。 對於具備時區的值,請使用ZonedDateTime 。 二者都提供相似於LocalDate
的parse()
方法:
LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter); ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);
DateTimeFormatter Javadoc中的列表格式字符:
All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. The following pattern letters are defined: Symbol Meaning Presentation Examples ------ ------- ------------ ------- G era text AD; Anno Domini; A u year year 2004; 04 y year-of-era year 2004; 04 D day-of-year number 189 M/L month-of-year number/text 7; 07; Jul; July; J d day-of-month number 10 Q/q quarter-of-year number/text 3; 03; Q3; 3rd quarter Y week-based-year year 1996; 96 w week-of-week-based-year number 27 W week-of-month number 4 E day-of-week text Tue; Tuesday; T e/c localized day-of-week number/text 2; 02; Tue; Tuesday; T F week-of-month number 3 a am-pm-of-day text PM h clock-hour-of-am-pm (1-12) number 12 K hour-of-am-pm (0-11) number 0 k clock-hour-of-am-pm (1-24) number 0 H hour-of-day (0-23) number 0 m minute-of-hour number 30 s second-of-minute number 55 S fraction-of-second fraction 978 A milli-of-day number 1234 n nano-of-second number 987654321 N nano-of-day number 1234000000 V time-zone ID zone-id America/Los_Angeles; Z; -08:30 z time-zone name zone-name Pacific Standard Time; PST O localized zone-offset offset-O GMT+8; GMT+08:00; UTC-08:00; X zone-offset 'Z' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15; x zone-offset offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15; Z zone-offset offset-Z +0000; -0800; -08:00;