获取本月的第几天

Get Day of the month

我了解到 Java 8 中引入的 java.time 包更易于使用。但是,我在 Java 7 中进行挑战,当我 运行 我的代码时,我对错误是什么感到头疼。我正在尝试在最后一行打印星期几(文本)。但是,它在最后一次打印时打印 null 。如果我将月份从 7 更改为 8,它会在最后一个打印语句中打印星期六。想知道,我做错了什么。

新公历的月份参数输出为 7

8 月 5 日星期三 00:00:00 2015 年澳大利亚东部标准时间

4

将新公历的月份参数输出为 8

2015 年 9 月 5 日星期六00:00:00

7

星期六

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()));


    }
}

你说得对,你不应该在 2019 年使用 GregorianCalendar。也不在 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));

输出为:

Mon

你的代码出了什么问题?

你想要的:

    System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG, Locale.getDefault()));

getDisplayName 的第一个参数是字段代码,如 DAY_OF_WEEK。当传递 该字段的实际值 时,您可能会给它一个无效值,在这种情况下方法 returns null (这可能会造成混淆 - 谢谢感谢 Kevin Andersson 承认这是年度轻描淡写 (;->)!)。

字段 4 是 WEEK_OF_MONTH。一个月中的几周没有名称,只有数字,这就是为什么没有字符串表示适用于该字段的原因。字段 7 是 DAY_OF_WEEK,因此您在第二种情况(8 = September)中得到预期结果纯属巧合。

链接