据我所知,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 承认这是年度轻描淡写 (;->)!)。
字段 4 是WEEK_OF_MONTH
。该月的星期没有名称,只有数字,这就是为什么没有字符串表示形式适用于该字段。字段 7 是DAY_OF_WEEK
,因此您在第二种情况(8 = 九月)中得到预期结果纯属巧合。
添加回答
举报
0/150
提交
取消