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
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);
, но я действительно хотел что-то легко понятное и читаемое.
Базовая концепция кода:
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.
Перечисление 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 .
Инфраструктура java.time встроена в Java 8 и позже. Эти классы вытесняют проблемные старые унаследованные классы даты и времени, такие как java.util.Date
, Calendar
и amp; SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует переход на java.time.
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация: JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь, такие как Interval
, YearWeek
, YearQuarter
и еще .