当前位置: 首页 > 知识库问答 >
问题:

Java日历setFirstDayOfWeek不工作

邢博文
2023-03-14

这是现在真正的日历:

   March 2015       
Su Mo Tu We Th Fr Sa  
 1  2  3  4  5  6  7  
 8  9 10 11 12 13 14  
15 16 17 18 19 20 21  
22 23 24 25 26 27 28  
29 30 31   

我得到的DAY_OF_WEEK2015/3/24是这样的:

public class TestCalendar {
    public static void main(String[] argvs){
        Calendar cal = Calendar.getInstance();
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(2015,Calendar.MARCH,24);
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));
    }
}

因为我有cal。将FirstDayOfWeek设置为MONDAY我预期的结果是2,但无论我将哪一天设置为一周的第一天(已经尝试了SUNDAY和其他)。它不断向我显示相同的结果,即3。因此,firstDayOfWeek似乎不会影响结果。

我做错什么了吗?

编辑

多亏了下面的答案,我才知道这个setFirstDayOfWeek不会影响get(Calendar.DAY\u of_WEEK)get(Calendar.WEEK of_YEAR)

那么这个方法是为什么设计的?我的意思是,我怎么能告诉程序我希望2015/3/29是第12周的最后一天,而不是把它当作第13周的第一天?


共有3个答案

萧宏峻
2023-03-14

setFirstDayOfWeek只告诉日历哪一天被视为第一天,即周日、周一或其他任何一天。它不会改变任何任意日期的星期几。此方法的javadoc声明如下:

public void setFirstDayOfWeek(int值)

设置一周的第一天是什么;e、 星期天在美国,星期一在法国。

参数:值-给定的一周的第一天。

包修贤
2023-03-14

cal。get(Calendar.DAY OF WEEK)将返回当前日期(星期日、星期一等)在给定的日期。所以它会在星期二和第三天返回给你,无论一周的第一天是什么。这与setFirstDayOfWeek方法无关。

如果你想计算从一周开始的天数,你只需要使用getFirstDayOfWeek获得一周的第一天,然后做一些简单的数学运算。

夹谷和韵
2023-03-14
LocalDate.of( 2015 , Month.MARCH , 24 )  // `LocalDate` object for 2015-03-24.
         .getDayOfWeek()                 // DayOfWeek.TUESDAY constant object
         .getValue()                     // 2

Calendar和它的兄弟类一样,都是一团乱麻。幸运的是,这些旧的日期时间类现在是遗留的,被java所取代。时间课。

如果希望周一为一周的第一天,周日为最后一天,编号为1-7,那么使用java中默认使用的ISO 8601日历。时间课。

DayOfWeek枚举为一周中的每一个ISO日保存预定义的对象。如果需要,您可以询问它的编号,但通常最好传递此枚举的对象而不是单纯的整数。

LocalDate类表示一个只包含日期的值,不包含一天中的时间和时区。

LocalDate ld = LocalDate.of( 2015 , Month.MARCH , 24 );
DayOfWeek dow = ld.getDayOfWeek();
int value = dow.getValue(); // 1-7 for Monday-Sunday. But often better to use the `DayOfWeek` object rather than a mere integer number.

对于周一不是第一天的一周的其他定义,请参见WeekFields课程。

爪哇。时间框架内置于Java8及更高版本中。这些类取代了麻烦的旧遗留日期时间类,比如java。util。日期日历

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。

在哪里可以获得java。时间课?

  • Java SE 8和SE 9及更高版本
  • 许多java.time功能被反向移植到Java6
  • ThreeTenABP项目专门为Android改编了ThreeTen Backport(如上所述)

额外的Three Ten项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,等等。

 类似资料:
  • 我写了一个日历视图的程序,它不能正常工作,因为我想要。首先,我有一个按钮,当点击打开一个新的活动,里面有一个线性布局,我有3个日月年的文本视图,我有一个对话框打开点击线性布局,因为我说我有3个文本视图在我的线性布局,而不是使用三个不同的点击监听器,我使用了在线性布局ID的帮助下点击,所以我的日历对话框打开了,但当我使用calendar.setOnDateChangeListener我的应用程序崩溃

  • 我写了代码,它使用Java日历并显示时间戳的DAY_OF_WEEK。但是默认日历从星期日(1)开始。我希望它从星期一开始,例如。它应该在星期一返回1。这是我的代码: setFirstDayOfWeek()在这种情况下没有帮助。 星期二的输出应该是2,但它显示我是3。任何帮助都将不胜感激。

  • 我正在寻找确切的开始和结束日期根据我们的桌面日历,如果我给周,年作为输入。但是上面的代码给出的输出是2009年1月27日星期日。我知道这是因为按照我们的说法,一周的第一天默认是星期天,但我需要按照桌面日历

  • 我试图向fullcalendar scheduler 5.8添加工具提示,但未能实现此功能。 在fullcalendar调度程序模板中,我添加了“工具提示”和“popper”库以及CSS,它们可以处理简单的fullcalendar,但没有结果。我的模板起点是https://fullcalendar.io/docs/event-tooltip-demo 工具提示模板示例图像 在Javascript代

  • 问题内容: 我在JUnit测试中有以下代码,该代码上周似乎正常工作,但本周失败了: 您可能会从我的评论中推断出,由于12日是星期二,因此我希望将DAY_OF_WEEK设置为星期五后,日期将为15。但是,打印的值为22,并导致测试失败。 但是,如果我将代码更改如下,并添加另一个调用以获取: 我得到预期的输出12和15。 有人可以解释发生了什么,为什么上周该测试仍然有效? 问题答案: 首先要了解的是,

  • 问题内容: 我有一个电影课,里面有开始日期,持续时间和结束日期。开始和停止日期是日期对象(私有日期startDate …)(这是一个分配,因此我无法更改),现在我想通过将持续时间(以分钟为单位)添加到startDate中来自动计算stopDate。 据我所知,不赞成使用Date的时间操作功能,因此是不好的做法,但另一方面,我看不到将Date对象转换为日历对象以操纵时间并将其重新转换为Date对象的