Java 在Android中设置日历字段
使用设置日历中的日期字段Java 在Android中设置日历字段,java,android,calendar,dayofweek,java.util.calendar,Java,Android,Calendar,Dayofweek,Java.util.calendar,使用设置日历中的日期字段 myCalender.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 是把这一天定在下个星期五还是上个星期五,或者是最近的一天 另外,如果我没有为日历设置年份或任何其他字段,那么默认值是什么呢?它将是nexFriday 2018年2月23日星期五,20:44:17.353 默认值是今年它将是下周五 2018年2月23日星期五,20:44:17.353 默认值为今年 默认值是什么 下周五还是上周五,或者最近的 因此,下一个
myCalender.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
是把这一天定在下个星期五还是上个星期五,或者是最近的一天
另外,如果我没有为日历设置年份或任何其他字段,那么默认值是什么呢?它将是nexFriday
2018年2月23日星期五,20:44:17.353
默认值是今年它将是下周五
2018年2月23日星期五,20:44:17.353
默认值为今年
默认值是什么
下周五还是上周五,或者最近的
因此,下一个时间/日期的答案是下周五
见
默认值是什么
下周五还是上周五,或者最近的
因此,下一个时间/日期的答案是下周五
请同时参阅。然而这很复杂。但不要使用
日历
,请参见下文
发件人:
将给定日历字段设置为给定值。值不是
用这种方法解释
因此,在这个调用过程中,它只是将day of week字段设置为Friday。年、月和月日保持不变,也就是说,日期没有有效更改。然而
如果日历
最终计算并解析其字段
如果日历字段值存在任何冲突,calendar
给出
最近设置的日历字段的优先级。这个
以下是日历字段的默认组合。这个
最近的组合,由最近设置的单个
字段,将使用
如果您只设置了星期几(这可能会与其他字段产生冲突),则以下组合适用:
年+月+周/月+日/周
因此,它将选择同一周的星期五
定义周的内容由日历
的“周的第一天”字段确定。其初始值由日历的区域设置决定,您可以通过getFirstDayOfWeek()
和setFirstDayOfWeek()
对其进行控制。这反过来意味着,在欧洲地区,日历
先前设置为星期日的默认行为将返回到上一个星期五,而在美国地区,日历
将选择下一个星期五
如果在设置星期几之后但在计算字段之前还设置了其他字段,则情况就不同了
默认值?
通常,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()));
问题:我可以在Android上使用java.time
?
是的,java.time
在Android设备上运行良好。它至少需要Java6
- 在Java8和更高版本中,以及在新的Android设备上(听说是API级别26),新的API是内置的
- 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310,其中最早描述了现代API)
- 在(较旧的)Android上,使用Android版的ThreeTen Backport。它叫ThreeTenABP。确保从package
org.threeten.bp
和子package导入日期和时间类
链接
- ,解释如何使用
java.time
- ,Android版Three Ten Backport
- ,解释得非常透彻
都不是。然而这很复杂。但不要使用
日历
,请参见下文
发件人:
将给定日历字段设置为给定值。值不是
用这种方法解释
因此,在这个调用过程中,它只是将day of week字段设置为Friday。年、月和月日保持不变,也就是说,日期没有有效更改。然而
如果日历
最终计算并解析其字段
如果日历字段值存在任何冲突,calendar
给出
最近设置的日历字段的优先级。这个
以下是日历字段的默认组合。这个
最近的组合,由最近设置的单个
字段,将使用
如果您只设置了星期几(这可能会与其他字段产生冲突),则以下组合适用:
年+月+周/月+日/周
因此,它将选择同一周的星期五
定义周的内容由日历
的“周的第一天”字段确定。其初始值由日历的区域设置决定,您可以通过getFirstDayOfWeek()
和setFirstDayOfWeek()
对其进行控制。这反过来意味着,在欧洲地区,日历
先前设置为星期日的默认行为将返回到上一个星期五,而在美国地区,日历
将选择下一个星期五
如果在设置星期几之后但在计算字段之前还设置了其他字段,则情况就不同了
默认值?
通常,日历
字段的默认值为
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()));