【问题标题】:Determine which day of week is each date of the month确定一周中的哪一天是每个月的日期
【发布时间】:2016-05-11 18:00:58
【问题描述】:

我想用 Java 8 创建一个日历。到目前为止,我有这个:

YearMonth yearMonthObject = YearMonth.of(year, month);
int daysOfCurrentMonth = yearMonthObject.lengthOfMonth();

int i = 1;
ArrayList<Integer> Dayes = new ArrayList<Integer>();
for(i=1; i<=daysOfCurrentMonth; i++){
    Dayes.add(i);
}

Dayes.forEach(value -> System.out.print(value));

打印当月的天数(例如五月)。

如何确定 1 是星期日、2 是星期一、3 是星期二、...、8 是星期日(下周)等?

【问题讨论】:

    标签: java calendar java-time


    【解决方案1】:

    你有一个YearMonth 对象。对于一个月中的每一天,您可以致电 atDay(dayOfMonth) 以在该月的特定日期返回 LocalDate。有了LocalDate,您就可以致电:

    因此,您应该将Dayes 列表更改为包含LocalDates 而不是Integers,然后您可以拥有,例如:

    YearMonth yearMonthObject = YearMonth.of(year, month);
    int daysOfCurrentMonth = yearMonthObject.lengthOfMonth();
    
    ArrayList<LocalDate> dayes = new ArrayList<LocalDate>();
    for(int i = 1; i <= daysOfCurrentMonth; i++){
        dayes.add(yearMonthObject.atDay(i));
    }
    
    dayes.forEach(value -> System.out.println(value.getDayOfMonth() + " " + value.getDayOfWeek()));
    

    这将打印该月的每一天,然后是对应的一周中的一天。

    作为旁注,您可以通过调用getDisplayName(style, locale) 获得星期几的真实显示值(而不是上面枚举的name())。样式表示如何编写日期(长格式、短格式...),语言环境是用于显示名称的语言环境。一个例子是:

    value.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH)
    

    它将以英语输出一周中的一天的全文。具有上述更改的 04/2016 示例输出:

    1 Friday
    2 Saturday
    3 Sunday
    4 Monday
    5 Tuesday
    

    【讨论】:

    • 您的回答非常详细,解决方案非常简单。谢谢
    【解决方案2】:

    这可能有点“黑客”的解决方案,但如果您尝试为任何年制作日历,则可能必须使用“锚定日期”(例如 1 月 1 日) , 1800 作为星期三)。然后,您可以计算 1800 年 1 月 1 日与您当前的年/月/日之间发生的天数。一旦你计算出已经过去了多少天,使用 Modular 7 你就可以确定它是哪一天,然后从那里填充该月的日历。

    【讨论】:

    • 这种方法的问题是“计算 1800 年 1 月 1 日和当前年/月/日之间发生的天数”可能会非常复杂。由于政治决定,时区会不时发生变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2022-06-10
    • 2020-06-10
    相关资源
    最近更新 更多