使用java.time.DayOfWeek设置Calendar.DAY\u OF_WEEK
目前,我有一些代码可以基于java8 java.time.DayOfWeek对象在日历上设置周中的某一天。由于这些类型的整数值未对齐,即 Calendar.SUNDAY==1 何处为 星期日星期日=7 我想知道是否有一个推荐的方法可以从一个转换到另一个。目前我正在做这件事使用java.time.DayOfWeek设置Calendar.DAY\u OF_WEEK,java,Java,目前,我有一些代码可以基于java8 java.time.DayOfWeek对象在日历上设置周中的某一天。由于这些类型的整数值未对齐,即 Calendar.SUNDAY==1 何处为 星期日星期日=7 我想知道是否有一个推荐的方法可以从一个转换到另一个。目前我正在做这件事 calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek.getValue() == 7 ? 1 : dayOfWeek.getValue() + 1); DayOfWeek是一个枚举,表示一
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek.getValue() == 7 ? 1 : dayOfWeek.getValue() + 1);
DayOfWeek是一个枚举,表示一周中的7天-周一、周二、周三、周四、周五、周六和周日,然后是ISO-8601标准,从1(周一)到7(周日)。 更多信息 但在日历课上,它是以不同的方式给出的,即从星期日(1)到星期六(7)
我想你所采用的方法是很好的。更好的解决方案是格鲁吉亚日历,它将以更好的方式工作
Calendar calendar = new GregorianCalendar();
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
dayOfWeek=1,然后是Sunday。。。。dayOfWeek=7,然后是周六
我还需要将日历日转换为星期几,然后再转换回来:
fun dayOfWeekToCalendarDay(day: DayOfWeek): Int {
return (day.value % 7) + 1
}
fun calendarDayToDayOfWeek(calendarDay: Int): DayOfWeek {
val temp = (calendarDay + 6) % 7
return if (temp == 0) DayOfWeek.SUNDAY else DayOfWeek.of(temp)
}
首先,如果可以的话,您当然应该避免使用带有子类的设计糟糕且过时很久的
Calendar
类。现在我们有大量的遗留代码,这并不总是可能的
我不认为有一个官方的建议,如何转换,我很肯定,口味不同。我自己的首要任务之一是,如果我能避免自己做数学题,因为它不可避免地会变得有点难读。用户745733的评论启发了我:我可以。内置的WeekFields.SUNDAY\u START
对象以与Calendar
相同的方式对一周中的几天进行编号,从星期日=1到星期六=7。让我们用这个
DayOfWeek dayOfWeek = DayOfWeek.TUESDAY;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek.get(WeekFields.SUNDAY_START.dayOfWeek()));
System.out.println("" + calendar.get(Calendar.DAY_OF_WEEK) + " " + calendar.getTime());
刚才运行时的输出:
2019年6月4日星期二18:25:33 CEST
我得到了3分,星期二如期而至。我也参加了周六、周日和周一的考试
从Calendar
到DayOfWeek
另一方面,如果你得到的是一个真正的gregoriacalendar
,那就没那么糟糕了(不过有些地区会给你一个不同的Calendar
子类)
2019年6月8日星期六18:32:38=>星期六
(dayOfWeek.getValue()%7)+1
?您是否检查了WeekFields以了解您的区域设置?@MyLineers请详细说明一下?这并不是试图回答如何从一个转换到另一个的问题。
Calendar calendar = Calendar.getInstance();
DayOfWeek dow = ((GregorianCalendar) calendar).toZonedDateTime().getDayOfWeek();
System.out.println("" + calendar.getTime() + " => " + dow);