tl;dr
Boolean isWeekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY ).contains ( Instant.ofEpochSecond( 1342162320L ).atZone( ZoneId.of( "Europe/Helsinki" ) ).getDayOfWeek() )
詳細
他の回答は正しいですが、時代遅れのレガシークラスを使用しています。代わりに java.time クラスを使用してください。
質問の週末の部分は、組み込みの Java ライブラリを使用すると簡単です。米国の土曜日と日曜日など、週末である一連の曜日を定義できます。
休日をカバーするには、何らかの外部ライブラリ、Web サービス、またはデータベースが必要です。祝日の定義は、時間の経過とともに、司法管轄区や伝統によって異なります。質問のその部分は無視します。考えられる解決策の 1 つとして、Kennet による回答を参照してください。
DayOfWeek
DayOfWeek
列挙型は、週の 7 日間のそれぞれを識別します。ZonedDateTime
その についてa に問い合わせることができますDayOfWeek
。
最初に入力した数値を解析します。UTC での 1970 年の最初の瞬間のエポックからの秒数のように見えます。これを整数L
にするために最後の に注意してください。long
Instant instant = Instant.ofEpochSecond( 1342162320L );
タイムゾーンを適用します。
ZoneId zoneId = ZoneId.of( "Europe/Helsinki" );
ZonedDateTime zdt = instant.atZone( zoneId );
曜日が土曜日か日曜日かを尋ねて、週末をテストします。
DayOfWeek dow = zdt.getDayOfWeek();
Boolean isWeekend = ( dow.equals( DayOfWeek.SATURDAY ) || dow.equals( DayOfWeek.SUNDAY ) );
EnumSet
EnumSet
を使用して、実行を高速化し、メモリ使用量を抑えることもできます。
Set<DayOfWeek> weekend = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );
static final
アプリの実行中に定義が変更されない場合は、これを定数として宣言します。
static final Set<DayOfWeek> WEEKEND = EnumSet.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY );
オブジェクトを取得したら、それがインターフェイスDayOfWeek
の実装である EnumSet に含まれているかどうかを確認しSet
ます。
Boolean isWeekend = WEEKEND.contains( dow.getDayOfWeek() );
java.time
java.timeフレームワークは、Java 8 以降に組み込まれています。java.util.Date
これらのクラスは、 、.Calendar
、 &などの古い面倒な日時クラスに取って代わりますjava.text.SimpleDateFormat
。
Joda -Timeプロジェクトは現在メンテナンス モードにあり、java.time への移行を推奨しています。
詳細については、 Oracle チュートリアルを参照してください。また、Stack Overflow で多くの例と説明を検索してください。
java.time 機能の多くは、ThreeTen-Backportで Java 6 および 7 にバックポートされ、さらにThreeTenABPでAndroidに適合されています。
ThreeTen -Extraプロジェクトは、追加のクラスで java.time を拡張します。このプロジェクトは、java.time.