簡體   English   中英

Android獲取兩個日期之間的星期幾名稱

[英]Android get week day names between two dates

我想使用簡單的Java獲得兩個日期之間的日期名稱,而不使用任何第三方庫。

我想獲得周六,周日,周一等兩天之間的名字。

/**
     * 
     * @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]

喬達時間

通常,我會建議使用Joda-Time庫,它是Java捆綁的臭名昭著的java.util.Date和java.util.Calendar類的流行替代品。 但是問題不需要第三方庫。

java.time。*

因此,下面的代碼示例使用了與Java 8捆綁在一起的新java.time。*包 ,而不是Joda-Time。 這些課程均受Joda-Time的啟發,但已完全重新設計。 它們由JSR 310定義。 有關更多信息,請參見Oracle的新教程

解決方案非常簡單。 歸結為這一單行片段…

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

為了好玩,我額外增加了一行以顯示本地化的難度。 在這種情況下,我顯示一周中的法語和美國英語單詞。

這是完整的代碼段,如果導入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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM