Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java.time.DayOfWeek设置Calendar.DAY\u OF_WEEK_Java - Fatal编程技术网

使用java.time.DayOfWeek设置Calendar.DAY\u OF_WEEK

使用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是一个枚举,表示一

目前,我有一些代码可以基于java8 java.time.DayOfWeek对象在日历上设置周中的某一天。由于这些类型的整数值未对齐,即

Calendar.SUNDAY==1

何处为

星期日星期日=7

我想知道是否有一个推荐的方法可以从一个转换到另一个。目前我正在做这件事

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);