據我所知,Java 8 中引入的 java.time 包使用起來要簡單得多。然而,我正在 Java 7 中進行挑戰,當我運行我的代碼時,我很困惑到底錯誤是什么。我正在嘗試在最后一行打印星期幾(以文本形式)。但是,它在最后一次打印中打印 null。如果我將月份從 7 更改為 8,則會在最后一個打印語句中打印星期六。想知道我做錯了什么。新 GregorianCalendar 的月份參數輸出為 72015 年澳大利亞東部時間 8 月 5 日星期三 00:00:004無效的新 GregorianCalendar 的月份參數輸出為 82015 年澳大利亞東部時間 9 月 5 日星期六 00:00:007周六import java.util.Calendar;import java.util.GregorianCalendar;import java.util.Locale;public class Test { public static void main(String[] args){ Calendar calendar = new GregorianCalendar(2015,7,5); System.out.println(calendar.getTime().toString()); System.out.println(calendar.get(Calendar.DAY_OF_WEEK)); System.out.println(calendar.getDisplayName(calendar.get(Calendar.DAY_OF_WEEK),Calendar.LONG, Locale.getDefault())); }}
1 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
你是對的,你不應該GregorianCalendar
在 2019 年使用。在 Java 7 中也不應該使用。java.time(現代 Java 日期和時間 API)已向后移植。使用 ThreeTen 向后移植。請參閱底部的鏈接。
????LocalDate?date?=?LocalDate.of(2019,?Month.AUGUST,?5); ????????DayOfWeek?dow?=?date.getDayOfWeek(); ????System.out.println(dow.getDisplayName(TextStyle.SHORT,?Locale.ENGLISH));
輸出是:
我的
你的代碼出了什么問題?
你曾經想要:
????System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG,?Locale.getDefault()));
第一個參數getDisplayName
是字段代碼,例如DAY_OF_WEEK
.?當傳遞該字段的實際值時,您可能會冒給它一個無效值的風險,在這種情況下該方法會返回null
(這可能會令人困惑 - 感謝 Kevin Andersson 承認這是年度輕描淡寫 (;->)?。?/p>
字段 4 是WEEK_OF_MONTH
。該月的星期沒有名稱,只有數字,這就是為什么沒有字符串表示形式適用于該字段。字段 7 是DAY_OF_WEEK
,因此您在第二種情況(8 = 九月)中得到預期結果純屬巧合。
添加回答
舉報
0/150
提交
取消