TL; DR
コアコードコンセプト:
EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY)
.contains(
LocalDate.now(ZoneId.of("America/Montreal"))
.getDayOfWeek()
)
java.time
近代的な方法は、java.timeクラスです。
DayOfWeek
enumは、月曜日から日曜日の7つのオブジェクトを提供します。
LocalDate
クラスは、時間帯のない時間帯のない日付のみの値を表します。
タイムゾーンは、日付を決定する際に重要です。任意の瞬間について、日付は地球の周りでゾーンごとに異なります。たとえば、Paris Franceの真夜中の数分後には、新しい日がありますが、まだ「昨日」はMontréal Québecです。
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
DayOfWeek dow = today.getDayOfWeek();
DayOfWeek
オブジェクトのセットとして週末を定義します。 EnumSet
は、DayOfWeek
などのオブジェクトを保持するように設計されたSet
の特に高速で低メモリの実装です。
Set<DayOfWeek> weekend = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY);
今は、今日が平日か週末かをテストできます。
Boolean todayIsWeekend = weekend.contains(dow);
この質問は、週末の場合は来週の開始にジャンプしたいとしています。これを行うには、TemporalAdjuster
を使用します。これは、日付/時刻オブジェクトを操作できるクラスを提供します。 java.timeにはimmutable objectsがあります。つまり、元のオブジェクトを変更(「変更」)するのではなく、既存のオブジェクト内の値に基づいて新しいインスタンスを生成します。 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);
}
live code in IdeOne.comを参照してください。 java.timeについて
java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、Calendar
、& SimpleDateFormat
など、面倒な古いlegacy日時クラスに取って代わります。
にあるJoda-Timeプロジェクトは、java.timeへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
返信いただきありがとうございます!私はそれを実行する場合、それは週の曜日は2(ここでは日曜日です)と言います。だから、私はそれを月曜日から3日に開始しました。それは正しいのですか? – Cristian
本当にありがとう!!!!! – Cristian
'dayOfWeek == 6'などに優先して、 'dayOfWeek == Calendar.FRIDAY'を使用することがありますか? –