Как проверить, суббота / воскресенье?

Больше функций с помощью find

  • существование Проверки папки в подкаталогах:

    found=`find -type d -name "myDirectory"`
    if [ -n "$found"]
    then
        # The variable 'found' contains the full path where "myDirectory" is.
        # It may contain several lines if there are several folders named "myDirectory".
    fi
    
  • существование Проверки одной или нескольких папок на основе шаблона в текущем каталоге:

    found=`find -maxdepth 1 -type d -name "my*"`
    if [ -n "$found"]
    then
        # The variable 'found' contains the full path where folders "my*" have been found.
    fi
    
  • Обе комбинации. В следующем примере это проверяет существование папки в текущем каталоге:

    found=`find -maxdepth 1 -type d -name "myDirectory"`
    if [ -n "$found"]
    then
        # The variable 'found' is not empty => "myDirectory"` exists.
    fi
    
26
задан Alex Weitz 27 March 2016 в 10:44
поделиться

2 ответа

public static void main(String[] args) {
    Calendar c = Calendar.getInstance();
    // Set the calendar to monday of the current week
    c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

    // Print dates of the current week starting on Monday to Friday
    DateFormat df = new SimpleDateFormat("EEE dd/MM/yyyy");
    for (int i = 0; i <= 10; i++) {
        System.out.println(df.format(c.getTime()));
        int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
        if (dayOfWeek == Calendar.FRIDAY) { // If it's Friday so skip to Monday
            c.add(Calendar.DATE, 3);
        } else if (dayOfWeek == Calendar.SATURDAY) { // If it's Saturday skip to Monday
            c.add(Calendar.DATE, 2);
        } else {
            c.add(Calendar.DATE, 1);
        }

        // As Cute as a ZuZu pet.
        //c.add(Calendar.DATE, dayOfWeek > Calendar.THURSDAY ? (9 - dayOfWeek) : 1);
    }
}

Вывод

Mon 03/01/2011
Tue 04/01/2011
Wed 05/01/2011
Thu 06/01/2011
Fri 07/01/2011
Mon 10/01/2011
Tue 11/01/2011
Wed 12/01/2011
Thu 13/01/2011
Fri 14/01/2011
Mon 17/01/2011

Если вы хотите быть милым, вы можете заменить if / then / else на

c.add(Calendar.DATE, dayOfWeek > 5 ? (9 - dayOfWeek) : 1);

, но я действительно хотел что-то легко понятное и читаемое.

26
ответ дан 28 November 2019 в 07:16
поделиться

tl; dr

Базовая концепция кода:

EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY )           // Instantiate a n implementation of `Set` highly optimized in both memory usage and execution speed for collecting enum objects. 
       .contains(                                             // Ask if our target `DayOfWeek` enum object is in our `Set`. 
            LocalDate.now( ZoneId.of( "America/Montreal" ) )  // Determine today’s date as seen by the people of a particular region (time zone).
                     .getDayOfWeek()                          // Determine the `DayOfWeek` enum constant representing the day-of-week of this date.
        )

java.time

Современный способ - использование классов java.time.

Перечисление DayOfWeek предоставляет семь объектов для понедельника-воскресенья.

Класс LocalDate представляет значение только для даты без времени суток и без часового пояса.

Часовой пояс имеет решающее значение при определении даты. В любой момент времени дата меняется по всему земному шару в зависимости от зоны. Например, через несколько минут после полуночи в Париж Франция - новый день, хотя еще «вчера» в Монреаль Квебек .

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

Определить выходные как набор из DayOfWeek объектов. Обратите внимание, что EnumSet является особенно быстрой реализацией Set с низким объемом памяти и предназначена для хранения объектов Enum, таких как DayOfWeek.

Set<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );

Теперь мы можем проверить, является ли сегодня будний день или выходные.

Boolean todayIsWeekend = weekend.contains( dow );

Вопрос сказал, что мы хотим перейти к началу следующей недели, если это выходные. Для этого используйте TemporalAdjuster, который предоставляет классы, которые могут манипулировать объектами даты и времени. В java.time у нас есть неизменных объектов . Это означает, что мы создаем новые экземпляры на основе значений в существующем объекте, а не изменяем («изменяем») оригинал. Класс TemporalAdjusters (обратите внимание на множественное число ') предоставляет несколько удобных реализаций TemporalAdjuster, включая next( DayOfWeek ).

DayOfWeek firstDayOfWeek = DayOfWeek.MONDAY ;
LocalDate startOfWeek = null ;
if( todayIsWeekend ) {
    startOfWeek = today.with( TemporalAdjusters.next( firstDayOfWeek ) );
} else {
    startOfWeek = today.with( TemporalAdjusters.previousOrSame( firstDayOfWeek ) );
}

Мы программируем продолжительность недели на случай, если наше определение выходных когда-либо изменится.

LocalDate ld = startOfWeek ;
int countDaysToPrint = ( DayOfWeek.values().length - weekend.size() );
for( int i = 1 ; i <= countDaysToPrint ; i++ ) {
    System.out.println( ld );
    // Set up the next loop.
    ld = ld.plusDays( 1 );
}

См. живой код в IdeOne.com .

enter image description here


О java.time

Инфраструктура java.time встроена в Java 8 и позже. Эти классы вытесняют проблемные старые унаследованные классы даты и времени, такие как java.util.Date , Calendar и amp; SimpleDateFormat .

Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует переход на java.time.

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация: JSR 310 .

Где взять классы java.time?

  • Java SE 8 и SE 9 и позже
    • Встроенный ,
    • Часть стандартного Java API с встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и SE 7
    • Большая часть Java. временная функциональность перенесена на Java 6 & amp; 7 в ThreeTen-Backport .
  • Android

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь, такие как Interval , YearWeek , YearQuarter и еще .

]
19
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: