【发布时间】:2018-02-08 09:21:37
【问题描述】:
我想将给定日历实例的时间戳设置为一周的开始(星期一),而不是返回一个看似完全不相关的时间戳 - 除非我在此之前访问任何日历的字段。我在下面包含了一个示例,另请参阅Ideone 中的这个可运行示例。
这是预期的行为吗?这背后的逻辑是什么?是的,我听说过 Joda Time。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;
class MyTest {
private static Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("CET"), Locale.FRANCE);
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
public static void main(String[] args) {
// Set to any date.
calendar.set(2013, 10, 3);
System.out.println(dateFormat.format(calendar.getTime()));
// Set to another day.
calendar.set(2014, 0, 15);
// --- THE WTF STARTS HERE ---
// Uncommenting the line below returns the correct date in the end.
// calendar.getTime();
// Set to monday of current week.
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
// Expected outdate is 20140113
System.out.println(dateFormat.format(calendar.getTime()));
}
}
【问题讨论】:
-
你能这样设置第一天吗:calendar.setFirstDayOfWeek(0); calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());这将返回:20140111 编辑:零是星期日等。
-
是的,但我想要星期一 20140113。
-
似乎
getTime在内部触发了computeTime...可能连续设置两个日期会弄乱日历的内部状态。 -
有趣的是,它似乎适用于任何“一周的第一天”除了星期一...
-
Calendar和 Joda-Time 都是 passé,被 java.time 类所取代。