【问题标题】:Android get week day names between two datesAndroid获取两个日期之间的工作日名称
【发布时间】:2014-03-05 18:50:37
【问题描述】:

我想使用简单的 Java 获取两个日期之间的日期名称,而不使用任何第三方库。

我想在两天(包括这两天)之间获得像周六、周日、周一这样的名字。

【问题讨论】:

    标签: java android date dayofweek difference


    【解决方案1】:

    乔达时间

    通常我会建议使用Joda-Time 库,它是与 Java 捆绑在一起的臭名昭著的麻烦 java.util.Date 和 java.util.Calendar 类的流行替代品。但该问题不需要第三方库。

    java.time.*

    因此,下面的代码示例使用与 Java 8 捆绑在一起的新 java.time.* package,而不是 Joda-Time。这些课程受到 Joda-Time 的启发,但完全重新设计。它们由JSR 310 定义。有关详细信息,请参阅 Oracle 的 new Tutorial

    解决方案非常简单。归结为这一行片段……

    DayOfWeek.from( zonedDateTime ).getDisplayName( TextStyle.FULL, Locale.US );
    

    为了好玩,我多加了一行来展示本地化是多么容易。在这种情况下,我将显示法语和美国英语单词作为星期几。

    这是整个 sn-p,如果您导入 java.time.*java.time.format.*,就可以运行了。

    ZoneId timeZone = ZoneId.of( "America/New_York" );
    
    ZonedDateTime start = ZonedDateTime.now( timeZone );
    ZonedDateTime stop = start.plusDays( 2 );
    
    // Usually spans of time are handled in a "half-open" manner, meaning start is inclusive and stop is exclusive.
    // But the Question required both start and stop to be inclusive. So add "1".
    long days = java.time.temporal.ChronoUnit.DAYS.between( start, stop ) + 1L;
    
    System.out.println( days + " days from " + start + " to " + stop + " inclusive…");
    for ( int i = 0; i < days; i++ ) {
        ZonedDateTime zonedDateTime = start.plusDays( i );
        String dayOfWeek = DayOfWeek.from( zonedDateTime ).getDisplayName( TextStyle.FULL, java.util.Locale.US );
        String dayOfWeek_Français = DayOfWeek.from( zonedDateTime ).getDisplayName( TextStyle.FULL, java.util.Locale.FRENCH );
        System.out.println( "zonedDateTime: " + zonedDateTime + "  dayOfWeek: " + dayOfWeek + "  dayOfWeek_Français: " + dayOfWeek_Français );
    }
    

    运行时……

    3 days from 2014-02-08T06:06:33.335-05:00[America/New_York] to 2014-02-10T06:06:33.335-05:00[America/New_York] inclusive…
    zonedDateTime: 2014-02-08T06:06:33.335-05:00[America/New_York]  dayOfWeek: Saturday  dayOfWeek_Français: samedi
    zonedDateTime: 2014-02-09T06:06:33.335-05:00[America/New_York]  dayOfWeek: Sunday  dayOfWeek_Français: dimanche
    zonedDateTime: 2014-02-10T06:06:33.335-05:00[America/New_York]  dayOfWeek: Monday  dayOfWeek_Français: lundi
    

    【讨论】:

      【解决方案2】:
      /**
           * 
           * @param startDate
           * @param endDate
           * @return Start Date and End Date are <b>Inclusive</b>, days returned between these two dates
           */
          protected List<String> getWeekDayNames(Date startDate, Date endDate) {
              List<String> days = new ArrayList<String>();
      
              Calendar startCal = Calendar.getInstance();
              startCal.setTime(startDate);
      
              Calendar endCal = Calendar.getInstance();
              endCal.setTime(endDate);
      
              if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) {
      
                  days.add(this.formatDayOfWeek(startCal.getTime()));
      
                  return Collections.unmodifiableList(days);
              }
              // swap values
              if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) {
                  startCal.setTime(endDate);
                  endCal.setTime(startDate);
              }
      
              do {
      
                  days.add(this.formatDayOfWeek(startCal.getTime()));
      
                  startCal.add(Calendar.DAY_OF_MONTH, 1);
      
              } while (startCal.getTimeInMillis() <= endCal.getTimeInMillis());
      
              return Collections.unmodifiableList(days);
          }
      

      用法:

      Calendar cal = Calendar.getInstance();
              cal.add(Calendar.DAY_OF_MONTH, 15);
      
              List<String> list = new Test().getWeekDayNames(new Date(), cal.getTime());
      
              System.out.println(list);
      

      输出:

      [SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]
      

      【讨论】:

      • 我认为您在回答中错过了 formatDayOfWeek。请补充。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多