Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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 在Android中设置日历字段_Java_Android_Calendar_Dayofweek_Java.util.calendar - Fatal编程技术网

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