首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY),它会向后、向前还是未知?

Java Calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY),它会向后、向前还是未知?
EN

Stack Overflow用户
提问于 2009-08-23 20:30:04
回答 8查看 53.7K关注 0票数 27

假设以下代码在2009年8月22日(一个星期六)执行

代码语言:javascript
复制
   Calendar c = Calendar.getInstance();
   c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

c.get(Calendar.DAY_OF_MONTH)将返回23。我对返回14的条件感兴趣(上周日,而不是下周日)。

在设置DAY_OF_WEEK时,是否有与日历滚动DAY_OF_MONTH/YEAR的方向相关的规则?如果有,它们是什么?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-08-23 20:34:55

它应该始终保持相同的WEEK_OF_MONTH (http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#WEEK_OF_MONTH)。从文档中:

在设置或获取WEEK_OF_MONTH或WEEK_OF_YEAR字段时,日历必须将月份或年份的第一周确定为参考点。一个月或一年的第一周被定义为从getFirstDayOfWeek()开始的最早的七天时间段,并且至少包含该月或年的getMinimalDaysInFirstWeek()天。编号为...的周,-1,0在第一周之前;编号为2,3,...跟着它走。注意,get()返回的规范化编号可能不同。例如,特定的日历子类可以将一年的第一周的前一周指定为前一年的第n周。

票数 11
EN

Stack Overflow用户

发布于 2009-12-14 20:35:03

下面的公式返回一周中的“当前”天,范围为0;6

代码语言:javascript
复制
(d + numberOfDaysInAWeek - firstDayOfWeek) % numberOfDaysInAWeek

或者,如果您喜欢范围1,则添加1;7

代码语言:javascript
复制
(d + numberOfDaysInAWeek - firstDayOfWeek) % numberOfDaysInAWeek + 1

Calendar.get(Calendar.DAY_OF_WEEK)返回的是d

要获得一周的第一天,请从当前日期减去公式的结果。下面的代码可以做到这一点:

代码语言:javascript
复制
final int currentDayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) + 7 - cal.getFirstDayOfWeek()) % 7;
cal.add(Calendar.DAY_OF_YEAR, -currentDayOfWeek);
票数 8
EN

Stack Overflow用户

发布于 2017-03-27 16:03:06

使用java.time

现代的方法是使用java.time类,它取代了麻烦的旧遗留日期-时间类。

使用java.time类要容易得多。特别是,它们消除了问题中提出的歧义。您可以明确要求更早的周日或更晚的周日。

LocalDate类表示不带时间和时区的仅日期值。

Month枚举提供了12个预定义的对象,一年中的每个月一个。这些枚举对象使用起来更安全,但是您也可以使用一个普通的月份数字。与传统的课程不同,这些月份有合理的编号,1-12表示1-12月。

代码语言:javascript
复制
LocalDate localDate = LocalDate.of( 2009 , Month.AUGUST, 22 );

TemporalAdjuster接口提供对日期-时间值的操作。TemporalAdjusters类(注意复数s)提供了几个方便的实现。

previous & next调节器将日期本身排除在考虑之外。如果日期确实是所需的星期几,则previousOrSame & nextOrSame方法将返回相关日期。

DayOfWeek枚举提供了七个预定义对象,每个对象对应于一周中的每一天。

代码语言:javascript
复制
LocalDate previousSunday = localDate.with( TemporalAdjusters.previous ( DayOfWeek.SUNDAY ));
LocalDate previousOrSameSunday = localDate.with( TemporalAdjusters.previousOrSame ( DayOfWeek.SUNDAY ));

LocalDate nextSunday = localDate.with( TemporalAdjusters.next ( DayOfWeek.SUNDAY ));
LocalDate nextOrSameSunday = localDate.with( TemporalAdjusters.nextOrSame ( DayOfWeek.SUNDAY ));

转储到控制台。

代码语言:javascript
复制
System.out.println ("localDate: " + localDate + " ( " + localDate.getDayOfWeek ().getDisplayName ( TextStyle.FULL, Locale.US )  + " )");
System.out.println ("previousSunday: " + previousSunday );
System.out.println ("nextSunday: " + nextSunday );

localDate: 2009-08-22 (星期六)

previousSunday: 2009-08-16

nextSunday: 2009-08-23

关于java.time

java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

现在在maintenance mode中的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle Tutorial。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310

从哪里获取java.time类?

  • 和以及后来的
    • 内置。与implementation.
    • Java 9捆绑在一起的标准Java API的
    • 部分添加了一些次要功能和fixes.

  • 和.

中的

  • 许多java.time功能已向后移植到Java6和7

适用于安卓specifically.

  • See .

    • 项目适配ThreeTen-Backport (如上所述

项目使用额外的类扩展了java.time。这个项目是未来可能添加到java.time中的试验场。您可能会在这里找到一些有用的类,如IntervalYearWeekYearQuartermore

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1319473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档