2

我想得到一周的第一天,但​​我有一个奇怪的错误。如果我使用此代码:

Calendar cal = Calendar.getInstance();
cal.set(2017, 0, 1);

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());
Log.d(TAG, "Date: " + dateFormat.format(cal.getTime()));

我的日志显示错误的日期:D/Activity: Date: lundi 2 janvier 2017

但是,如果我getTime()像这样使用该方法:

Calendar cal = Calendar.getInstance();
cal.set(2017, 0, 1);
cal.getTime(); // Here

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, Locale.getDefault());
Log.d(TAG, "Date: " + dateFormat.format(cal.getTime()));

我的日志显示正确的日期:D/Activity: Date: lundi 26 décembre 2016

我的手机使用法语,所以我的一周从星期一开始。

有人知道为什么吗?

4

1 回答 1

3

Java 的 Calendar API 因其更新字段的行为而臭名昭著。问题是多次set()调用可能会导致一些意想不到的结果,因为一些内部没有得到正确调整,即它不会更新某些值,直到它真的必须,例如当你调用时getTime()

您可以在这篇文章中阅读更多内容。

所以,这个问题的解决方法确实是调用getTime()getTimeInMillis()介于两者之间。

于 2017-05-07T22:28:58.160 回答