【问题标题】:Gregorian Calendar starting day of the week Tuesday instead of Sunday公历每周的开始日期是星期二而不是星期日
【发布时间】:2014-11-13 10:12:13
【问题描述】:

我正在使用 GregorianCalendar

新的公历(1900, Calendar.JANUARY, 1)

并返回从星期二开始的日期。

有什么方法可以配置它,以便将“星期日”作为一周的第一天返回。

我想返回一个日历对象。

我使用了以下解决方案

switch (gregorianCalendar.get(Calendar.DAY_OF_WEEK)) {    
        case Calendar.MONDAY:
            gregorianCalendar.add(Calendar.DAY_OF_WEEK, -1);    
            break;  
        case Calendar.TUESDAY:  
            gregorianCalendar.add(Calendar.DAY_OF_WEEK, -2);  
            break;  
        case Calendar.WEDNESDAY:  
            gregorianCalendar.add(Calendar.DAY_OF_WEEK, -3);  
            break;  
        case Calendar.THURSDAY:  
            gregorianCalendar.add(Calendar.DAY_OF_WEEK, -4);  
            break;  
        case Calendar.FRIDAY:  
            gregorianCalendar.add(Calendar.DAY_OF_WEEK, -5);  
            break;  
        case Calendar.SATURDAY:    
            gregorianCalendar.add(Calendar.DAY_OF_WEEK, -6);  
            break;  
    }

我不知道它是不是最好的。

【问题讨论】:

  • 对不起,我不明白这个问题。对于new GregorianCalendar(1900, Calendar.JANUARY, 1),我得到的是星期一Mon, 1 Jan 1900,而不是星期二。此外,calendar.get(Calendar.DAY_OF_WEEK)) 取决于日期。不是所有星期都一样。我不明白。你能详细说明一下吗?
  • 星期二是随机结果。在公历初始化之后,我设置了一个整数,我想将其转换为日期。而且我想知道如何配置日期以便在返回的那一天而不是另一天返回星期日。这对您来说更清楚吗?
  • 一点也不。您在问题中提到的整数在哪里?你如何设置这个整数?编辑您的问题并发布相关代码。这个整数代表什么?是时间戳?随机值?如果您只想将日历中的日期设置为 SUNDAY:calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);

标签: java date gregorian-calendar


【解决方案1】:

我知道您正在寻找上周日? 那我宁愿做这样的事情:

while (gregorianCalendar.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) { gregorianCalendar.add(Calendar.DAY_OF_WEEK, -1); }

【讨论】:

    【解决方案2】:

    tl;博士

    LocalDate.of( 2017 , Month.MARCH , 23 )
             .with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) )
    

    java.time

    确定前一周日期的现代方法是使用 java.time 类。旧的日期时间类,例如 DateCalendar 现在已经过时了。

    LocalDate 类表示没有时间和时区的仅日期值。

    TemporalAdjuster 接口提供了一种从一个日期确定其他日期的方法。我们需要的实现可以在TemporalAdjusters 类(注意复数)中找到。

    LocalDate ld = LocalDate.of( 2017 , Month.MARCH , 23 ) ;
    LocalDate previousSunday = ld.with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) ) ;
    

    如果您尝试将一周表示为按特定顺序排列的星期几值的集合,请使用 EnumSetDayOfWeek 枚举对象。

    EnumSet<DayOfWeek> dows = EnumSet.of( DayOfWeek.SUNDAY , DayOfWeek.MONDAY , … ) ;
    

    关于java.time

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

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

    要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

    从哪里获得 java.time 类?

    ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-22
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多