为了账号安全,请及时绑定邮箱和手机立即绑定

获取该月的第几天

获取该月的第几天

牧羊人nacy 2024-01-17 16:42:23
据我所知,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 = 九月)中得到预期结果纯属巧合。

查看完整回答
反对 回复 2024-01-17
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信