使用在日历中设置日期字段
myCalender.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
是否将日期设置为下一个星期五或过去的星期五或最近的星期五?
另外,如果我没有为日历设置年份或任何其他字段怎么办,默认值是什么?
使用在日历中设置日期字段
myCalender.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
是否将日期设置为下一个星期五或过去的星期五或最近的星期五?
另外,如果我没有为日历设置年份或任何其他字段怎么办,默认值是什么?
两者都不。然而。情况很复杂。但不要使用Calendar
,见下文。
从两个参数set
方法的文档中:
将给定的日历字段设置为给定的值。该方法不解释该值...</p>
因此,在此调用期间,它只是将星期几字段设置为星期五。年、月、日保持不变,也就是说,日期没有有效地改变。然而。
如果Calendar
最终计算并解析其字段,
如果日历字段值有任何冲突,
Calendar
则优先考虑最近设置的日历字段。以下是日历字段的默认组合。将使用由最近设置的单个字段确定的最近组合。
如果您只设置了星期几(这可能会与其他字段发生冲突),则适用以下组合:
YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
所以它会选择同一周的星期五。
定义一周的内容由Calendar
的 first-day-of-week 字段决定。它的初始值是由的语言环境决定的,你可以通过和Calendar
来控制它。这反过来意味着先前设置为星期日的欧洲语言环境中的 a 的默认行为将返回到上一个星期五,而美国语言环境中的 a 将选择下一个星期五。getFirstDayOfWeek()
setFirstDayOfWeek()
Calendar
Calendar
如果您在设置星期几之后但在计算字段之前还设置了其他字段,情况就不同了。
通常,字段的默认值是Calendar
JVM 时区中的当前日期和时间(通常但不总是与设备的时区相同)。
好消息是你不需要关心。无论如何,该类Calendar
早已过时,而且(回想起来)它的设计也很糟糕,所以你不应该使用它。而是使用java.time
现代 Java 日期和时间 API。与它一起工作要好得多。根据您的需要,您可以例如使用LocalDate
日期或ZonedDateTime
带有时区的日期和时间。
现代课程为您提供了更好的清晰度和更大的灵活性。例如:
LocalDate ld = LocalDate.now(ZoneId.of("Pacific/Saipan"));
// the following calls do what the method names say
ld = ld.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
ld = ld.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
ld = ld.with(TemporalAdjusters.previous(DayOfWeek.FRIDAY));
ld = ld.with(TemporalAdjusters.previousOrSame(DayOfWeek.FRIDAY));
// set to Friday in the same ISO week
ld = ld.with(ChronoField.DAY_OF_WEEK, DayOfWeek.FRIDAY.getValue());
// set to Friday in the same US week
ld = ld.with(WeekFields.SUNDAY_START.dayOfWeek(),
DayOfWeek.FRIDAY.get(WeekFields.SUNDAY_START.dayOfWeek()));
java.time
在安卓上使用吗?是的,java.time
在 Android 设备上运行良好。它只需要至少Java 6。
org.threeten.bp
确保从包和子包中导入日期和时间类。java.time
。事实证明,使用 myCalender.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY)
是一团糟,它可能将日期设置为下一个或过去的星期五,我已经尝试了很多但无法弄清楚逻辑!
无论如何,我所需要的只是将日历设置为下周的特定日期,我设法使用该问题的答案来做到这一点..
下周五
2018 年 2 月 23 日星期五,20:44:17.353
默认值为今年
什么是默认值
Calendar rightNow = Calendar.getInstance(); //the default is the current time/date
下周五或过去的周五或最近的周五?
下一次/日期,因此,答案是下周五。
见文档