使用java.time.DayOfWeek设置Calendar.DAY_OF_WEEK

时间:2015-07-14 12:13:07

标签: java

目前,我已经获得了一些代码,可以根据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);

4 个答案:

答案 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和星期二。我也对星期六,星期日和星期一进行了测试。

CalendarDayOfWeek

反之,假设您所拥有的实际上是一个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然后星期六