【问题标题】:java calendar weekend of current week本周的java日历周末
【发布时间】:2011-04-15 07:48:41
【问题描述】:

Java 使用日历我想获取当前周末的日期,任何快速的想法

【问题讨论】:

标签: java calendar weekend


【解决方案1】:
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
c.getTime(); // => Date of this coming Saturday.

【讨论】:

  • 我喜欢它,因为我们不在乎今天是什么日子。 +1
  • 现在已经过时了。 java.time 类取代了这里看到的麻烦的旧 Calendar 类。
【解决方案2】:
Calendar currDate = Calendar.getInstance();;
currDate.add(Calendar.DAY_OF_YEAR, (Calendar.SATURDAY - currDate.get(Calendar.DAY_OF_WEEK) ));
System.out.println("weekend date is in the " + curreDate.get(Calendar.DAY_OF_MONTH));

【讨论】:

  • 我喜欢你的出身。并且全部使用DAY_OF_XXXXX。惊人的!! +1
  • 现在已经过时了。 java.time 类取代了这里看到的麻烦的旧 Calendar 类。
【解决方案3】:

试试这个:

String dayNames[]={"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"};
        String nomthNames[]={"janvier","février","mars","avril","mai","juin","juillet","Août","septembre","octobre","novembre","decembre"};
        Calendar date = Calendar.getInstance();
        String dayName = dayNames[date.get(Calendar.DAY_OF_WEEK)];
        String dayMonth = nomthNames[date.get(Calendar.MONTH)];

        lblBonjour.setText("<html><b>Bonjour, "+new Functions().getNomPrenom(myID)+"</b><br>"+
                "Ajourd'hui "+dayName+" "+date.get(Calendar.DATE)+" "+dayMonth+" "+date.get(Calendar.YEAR)+"<br>"+
                "Heure locale: "+date.get(Calendar.HOUR_OF_DAY)+":"+date.get(Calendar.MINUTE) );

【讨论】:

    【解决方案4】:

    乔达时间

    new DateTime().withDayOfWeek(DateTimeConstants.SATURDAY)
    

    【讨论】:

    • 仅供参考,Joda-Time 项目现在处于维护模式。它的团队建议迁移到 Java 8 及更高版本中内置的 java.time 类。对于 Java 6 和 7,请参阅 ThreeTen-Backport 项目。
    【解决方案5】:

    试试这个。它将给出工作日的开始和结束日期。

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MONTH, cal.MONTH);
    cal.set(Calendar.WEEK_OF_MONTH, cal.WEEK_OF_MONTH);
    int weekStart = cal.getFirstDayOfWeek();
    cal.set(Calendar.DAY_OF_WEEK,weekStart);
    Date WeekStartDate=cal.getTime();
    cal.set(Calendar.DAY_OF_WEEK,weekStart+7);
    Date WeekEndDate=cal.getTime(
    

    【讨论】:

    • 现在已经过时了。 java.time 类取代了这里看到的麻烦的旧 Calendar 类。
    【解决方案6】:

    tl;博士

    LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )                      // Today, in specific time zone.
             .with( TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY ) )  // Next Saturday, or today if already Saturday.
             .plusDays( 1 )                                               // Sunday
    

    java.time

    现代方法使用 java.time 类来替代设计不佳的麻烦 DateCalendar 类。

    当前日期

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

    时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因区域而异。例如,Paris France 中午夜后几分钟是新的一天,而 Montréal Québec 中仍然是“昨天”。

    continent/region 的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用 3-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的 (!)。

    ZoneId z = ZoneId.of( "America/Montreal" );
    LocalDate today = LocalDate.now( z );
    

    搬到下个周末

    您可以使用TemporalAdjuster 接口的实现从一个日期调整到另一个日期。 TemporalAdjusters 类中提供了一些方便的实现,例如nextOrSame。使用 DayOfWeek enum 对象指定星期几。请注意,DayOfWeek 是一个实际对象,而不仅仅是一个数字或字符串,它提供了 type-safety 并确保了有效值。

    LocalDate saturday = today.with( TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY ) ) ;
    LocalDate sunday = saturday.plusDays( 1 ) ;
    

    如果您想在同一个周末或上一个周末,请致电previousOrSame 调整员。


    关于java.time

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

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

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

    您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。

    从哪里获得 java.time 类?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 1970-01-01
      相关资源
      最近更新 更多