目前,我已经获得了一些代码,可以根据java8 java.time.DayOfWeek对象在日历上设置DAY_OF_WEEK。由于这些类型的整数值未对齐,即
Calendar.SUNDAY == 1
其中
DayOfWeek.SUNDAY == 7
我想知道是否有推荐的方式从一个转换为另一个。目前我正在这样做。
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek.getValue() == 7 ? 1 : dayOfWeek.getValue() + 1);
答案 0 :(得分:0)
我还需要将日历天转换为DayOfWeek并返回:
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)
}
答案 1 :(得分:0)
首先,如果可以的话,当然应该避免使用子类来设计糟糕且过时的Calendar
类。鉴于我们近来拥有的大量旧代码,这并不总是可能的。
我认为没有正式的转换建议,而且我敢肯定口味会有所不同。我自己的首要任务之一是,如果我自己避免做数学,那是不可避免的,因为这不可避免地会导致阅读困难。 user745733的评论激发了我:我可以。内置WeekFields.SUNDAY_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月3日星期二18:25:33 CEST
我得到了预期的3和星期二。我也对星期六,星期日和星期一进行了测试。
Calendar
到DayOfWeek
反之,假设您所拥有的实际上是一个GregorianCalendar
,那还不错(尽管某些语言环境会为您提供Calendar
的另一个子类)。
Calendar calendar = Calendar.getInstance();
DayOfWeek dow = ((GregorianCalendar) calendar).toZonedDateTime().getDayOfWeek();
System.out.println("" + calendar.getTime() + " => " + dow);
2019年6月8日星期六18:32:38 =>星期六
答案 2 :(得分:-2)
DayOfWeek 是一个代表一周7天的枚举 - 星期一,星期二,星期三,星期四,星期五,星期六和星期日,其后是ISO-8601标准,从1(星期一)开始)到7(星期日)。 有关详细信息click here
但是在Calender课程中,它是以不同的方式给出的,即从星期日(1)到星期六(7)。see here。
我猜你正在遵循的方法很好。
答案 3 :(得分:-3)
更好的解决方案是格鲁吉亚日历,它将以更好的方式运作。
@Controller("/test")
public class Test {
public String callback(HttpServletRequest request,HttpServletResponse response) {
...
}
}
dayOfWeek = 1然后星期日.... dayOfWeek = 7然后星期六