【问题标题】:Wrong DAY_OF_WEEK [duplicate]DAY_OF_WEEK 错误 [重复]
【发布时间】:2020-07-16 16:19:58
【问题描述】:

嘿,我写了下面的代码,但我不明白为什么它不起作用。例如今天 (04.04.2020) dayOfWeek 应该是 7,但结果是 2...。

    Calendar calendar = Calendar.getInstance();
    calendar.set(2020, 4, 4);
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    System.out.println(dayOfWeek); //this print 2 on the console

【问题讨论】:

标签: java calendar dayofweek


【解决方案1】:

错误在这行代码中:

calendar.set(2020, 4, 4);

它从一月开始,数字为 0。所以正确的代码应该是:

calendar.set(2020, 3, 4);

完整代码:

Calendar calendar = Calendar.getInstance();
calendar.set(2020, 3, 4);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println(dayOfWeek);

输出:

7

【讨论】:

  • 谢谢!现在我明白它是如何工作的了!
  • 如果你想使用Calendar类(我们通常不这样做),你应该使用命名常量Calendar.APRIL指定April,而不是无意义的3
  • 我是 Java 新手,我有一个作业作为家庭作业,被指定使用 Calendar 类,我输入了飞蛾和天数的数字。感谢您的规格,我会记住这一点。
  • @Ailema 谢谢你的背景。我觉得非常不幸的是,仍然有老师要求学生使用这门课和其他在 6 年前被更优秀的课程所取代的课程。
【解决方案2】:

虽然@Kaimson 的回答是正确的,但我会选择using java8s LocalDate 而不是 java.util.Calendar,您的代码将是:

DayOfWeek.valueOf(LocalDate.now().getDayOfWeek()).name()

如果您不使用 java8,请查看 joda time,它具有类似的 API:

DateTime.now().dayOfWeek() // yields a number 1-7 representing the current day

【讨论】:

  • 是的,我找到了 LocalData 类的解决方案,但我想了解为什么我的第一个解决方案不好。
  • 这不好,因为日历/日期库有很多很多缺点,正如 joda 网站上所暗示的那样。
  • 如果使用 Java 6 或 7 并打开外部依赖项,我会明确推荐 the backport of java.time 而不是 Joda-Time,尽管两者都是不错的选择。
猜你喜欢
  • 2013-03-20
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2019-11-29
  • 1970-01-01
  • 2010-11-10
相关资源
最近更新 更多