在我们的业务要求中,我们应该找出一周的第一天。
由于客户端是European
所以我使用以下代码来获取它。
但问题是,当我运行此代码时,我得到2
作为答案,因为我期待1
。
public class Test{
public static void main(String[] args) {
TimeZone eu = TimeZone.getTimeZone("Europe/Berlin");
Locale de = Locale.forLanguageTag("de");
int firstDayOfWeek = Calendar.getInstance(eu, de).getFirstDayOfWeek();
System.out.println(firstDayOfWeek);
}
}
有人可以帮助我理解这种行为。
答案 0 :(得分:3)
查看docs:
获取一周的第一天;例如,美国的星期日,法国的星期一。
和here:
public static final int MONDAY 2
这表明返回值取决于区域设置。
如果我们打印出来:
System.out.println(firstDayOfWeek == Calendar.MONDAY);
我们会看到true
。这意味着一周的第一天确实是星期一。只是你认为星期一是由1编码的。事实上,星期日被编码为1。
答案 1 :(得分:1)
Locale de = Locale.forLanguageTag("de");
WeekFields wf = WeekFields.of(de);
DayOfWeek firstDayOfWeek = wf.getFirstDayOfWeek();
System.out.println(firstDayOfWeek);
打印:
MONDAY
请勿使用令人困惑的旧Calendar
课程。一周的第一天你得到2。但是你不应该得到1吗?还是0?一周中的几天如何编号?忘记数字,使用DayOfWeek
中的java.time
枚举,现代Java日期和时间API。
要获得更漂亮的输出,请使用DayOfWeek.getDisplayName
或DateTimeFormatter
。如果您确实需要号码,请使用DayOfWeek.getValue
:
System.out.println(firstDayOfWeek.getDisplayName(TextStyle.FULL, de));
System.out.println(firstDayOfWeek.getValue());
输出是:
Montag
1
PS也不要使用TimeZone
和其他长期过时的日期和时间类。 java.time
可以更好地使用。这个事实在这个例子中表现得很好,但它的典型,当然不是巧合。
链接: Oracle tutorial: Date Time解释如何使用java.time
。
答案 2 :(得分:0)
根据the javadoc,星期一的价值是2。