【问题标题】:Day "1" of "DAY_OF_WEEK" does not coincide with Monday [duplicate]“DAY_OF_WEEK”的第“1”天与星期一不一致[重复]
【发布时间】:2021-11-05 21:55:17
【问题描述】:

我运行这个测试应用程序

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int currentDayNumber = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);

    Log.d("currentDayNumber",String.valueOf(currentDayNumber));

}

运行此测试的那一天是星期四,“currentDayNumber”给出了 5,这意味着“DAY_OF_WEEK”(从 1 到 7 编号的星期几)从星期日开始。

这与 Android 开发者页面 (https://developer.android.com/reference/java/time/DayOfWeek) 的说法相反,默认情况下 DAY_OF_WEEK 的数字 1 设置为 星期一

对这种差异有何解释?

【问题讨论】:

    标签: java android-studio calendar java-time dayofweek


    【解决方案1】:

    您的文档链接指向java.time.DayOfWeek,这确实是基于星期一的。但是您的代码似乎正在使用java.util.Calendar,即Sunday-based。您可以使用LocalDate.now().getDayOfWeek() 从默认时区的系统时钟中获取当前时间的java.time.DayOfWeek

    【讨论】:

    • 非常周到地让在java中使用相同口头参考(“星期几”)的不同约会系统在不同的日子开始。我想是为了让开发人员保持警觉。感谢您指出这一点。
    • @Evenness 公平地说,周日被认为是世界大部分地区一周的第一天,包括美国。
    • @Evenness 是的,它可能有点令人困惑......日历 API 可以追溯到 JDK 1.1,它于 1997 年发布。时间 API (JSR 310) 更新得多,并且是2014 年在 Java 8 中引入。工作日偏差的变化是由于 Time API 是基于 ISO 8601 标准构建的,其中工作日从周一到周日运行。
    • @Evenness 这似乎经常发生。在Date 年份是基于 1900 年的,在GregorianCalendar 他们遵循人类数字。在GregorianCalendar 中,月份是从 0 开始的(与人类编号相反),在 java.time 中它们是从 1 开始的。我通常觉得他们放一些更好的东西而不是旧的令人困惑的课程是件好事。无论如何,没有人应该再使用CalendarGregorianCalendar
    猜你喜欢
    • 2019-08-09
    • 1970-01-01
    • 2016-10-24
    • 2019-10-19
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多