【问题标题】:How to find the day of week (Monday, tuesday etc.) of the first day of a month in Java?如何在Java中找到一个月第一天的星期几(星期一,星期二等)?
【发布时间】:2021-09-06 18:33:37
【问题描述】:

例如,如何在 Java 中找到 6 月 1 日是一周中的哪一天?

【问题讨论】:

  • 你必须使用DateCalendar吗?到目前为止你尝试过什么?
  • 我更喜欢使用日历
  • 请停下!您绝对应该使用Calendar。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time APILocalDateDayOfWeek
  • YearMonth.now(ZoneId.systemDefault()).atDay(1).getDayOfWeek()。在本月运行它产生TUESDAY
  • 欢迎来到 Stack Overflow。请了解您应该在此处提问之前进行搜索,当您发布问题时,请告诉我们您的搜索结果并说明它如何未能解决您的问题。这是为您自己着想,因为 (1) 您通常可以更快地找到更好的答案 (2) 它使我们能够提供更精确和更有针对性的答案。它还倾向于防止或至少减少反对票的数量。

标签: java date calendar dayofweek


【解决方案1】:

使用java.util.Date(旧的时间/日期类):

Date date=new Date(); // today
Date date = new Date(2021, 06, 23); // custom
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); // 3
String dayWeekText = new SimpleDateFormat("EEEE").format(date); //TUESDAY

使用java.time.LocalDate

LocalDate localDate = LocalDate.of(2021, 06, 23); // custom
LocalDate localDate = LocalDate.now(); // today
java.time.DayOfWeek dayOfWeek = localDate.getDayOfWeek();
dayOfWeek.getValue(); // 4
dayOfWeek.toString(); // WEDNESDAY

【讨论】:

  • 如果我想让一个月成为一个变量怎么办。即返回当月第一天的星期几。例如,如果我在 6 月运行此函数,则返回 6 月 1 日,当我在 7 月运行此函数时,将返回 7 月 1 日
  • @drugsrbad 随意使用自定义/重载的构造函数并添加信息。您可以像这样使用它:LocalDate.of(2021, month, 01); 其中日固定为 1,月份可以是变量的任何值,而年份是固定的。如果您希望年份是动态使用:LocalDate.of(LocalDate.now().getYear(), month, 01); 如果它应该始终只取当前 mont 的第一个日期,它将是:LocalDate.of(LocalDate.now().getYear(), LocalDate.now().getMonth(), 01);
  • 即使读者坚持使用设计不佳且早已过时的Date类(问题中未注明也不推荐),您也应该保持远离三参数 Date 构造函数。它已被弃用 24 年,因为它跨时区运行不可靠。
【解决方案2】:

如果您希望星期几为String,您可以使用此示例中的代码:

public static void main(String[] args) {
    // provide the date (alternatively, parse it from a String)
    LocalDate firstOfJune2021 = LocalDate.of(2021, 6, 1);
    // then get the day of week by means of a DateTimeFormatter
    String dayOfWeek = firstOfJune2021.format(
                            DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH)
                       );
    // as an alternative, you can get it by chain-calling some methods
    String altDayOfWeek = firstOfJune2021.getDayOfWeek()
                                         .getDisplayName(TextStyle.FULL, Locale.ENGLISH);
    // print the results
    System.out.println(firstOfJune2021 + " was a " + dayOfWeek);
    System.out.println(firstOfJune2021 + " was a " + altDayOfWeek);
}

此代码产生以下输出:

2021-06-01 was a Tuesday
2021-06-01 was a Tuesday

有一个enum DayOfWeek,实际上是LocalDate.getDayOfWeek()的结果类型。
如果您想使用 intenumString 表示之类的值,您的问题并不清楚...

【讨论】:

    【解决方案3】:

    这取决于您使用的 Java 版本和类型。从 Java 8 开始使用 LocalDate 确定星期几的简单方法如下所示:

    LocalDate date = LocalDate.of(2021, 6, 1);
    System.out.println(date.getDayOfWeek().getValue());
    

    返回值从 1(星期一)到 7(星期日)编号。

    可以在How to determine day of week on Baeldung 中找到对不同方法的简要概述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 2019-10-19
      • 2011-12-05
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多