2013-08-29 114 views
0

我創建了新的SimpleDateFormat對象,該對象將給定的字符串解析爲日期對象。日期格式如下:使用日曆和日期實例不顯示星期幾

SimpleDateFormat simpledateFormat = new SimpleDateFormat("dd-MM-yyyy"); 

而且我設置該日期的日曆實例如下:

Date date = sampledateFormat.parse("01-08-2013"); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 

現在,我從這個日曆獲取星期的一天。它給了錯誤的價值。

System.out.println(calendar.DAY_OF_WEEK); 

它給出的輸出是7即星期六,但期望值是5即星期四。有什麼問題?

回答

4

您應該打印

calendar.get(Calendar.DAY_OF_WEEK); 

Calendar類具有DAY_OF_WEEK爲整數常量(具有值7),其應與Calendar.get(int)方法一起使用。 DAY_OF_WEEK是一個日曆字段,並且所有這些常量字段都用於不同於calendar實例的值。他們的價值無關緊要。

+0

感謝兄弟。我知道了。 –

0

TL;博士

LocalDate.parse( // Parse the input string by specified formatting pattern to get a date-only `LocalDate` object. 
    "01-08-2013" , 
    DateTimeFormatter.ofPattern("dd-MM-uuuu") 
) 
.getDayOfWeek() // Get a `DayOfWeek` enum object. This is *not* a mere String. 
.getValue()  // Ask the `DayOfWeek` object for its number, 1-7 for Monday-Sunday per ISO 8601 standard. 

java.time

現代的方法使用java.time類,取代了麻煩的舊的遺留日期時間類如SimpleDateFormatDateCalendar

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

定義要匹配的格式模式。

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MM-uuuu") ; 

解析輸入字符串。

LocalDate ld = LocalDate.parse("01-08-2013" , f) ; 

ld.toString():2013年8月1日

詢問的星期幾,。獲取一個DayOfWeek枚舉對象,這是七個預定義對象之一,用於週一至週日。

DayOfWeek dow = ld.getDayOfWeek() ; 

dow.toString():星期四

你可以問DayOfWeek對象的本地化名稱,併爲多家1-7週一至週日每ISO 8601標準。

int dowNumber = dow.getValue() ; 
String output = dow.getDisplayName(TextStyle.FULL , Locale.CANADA_FRENCH) ; // Or Locale.US, Locale.ITALY, etc. 

jeudi


關於java.time

java.time框架內置於Java 8及更高版本。這些類代替了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

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

您可以直接使用數據庫交換java.time對象。使用符合JDBC 4.2或更高版本的JDBC driver。無需字符串,不需要java.sql.*類。

從何處獲取java.time類?

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