web-dev-qa-db-ja.com

Java:カレンダーから週の任意の日を取得します

Calendarを使用すると、当日の週、年、およびすべての詳細を取得できます。その週の特定の日に移動するにはどうすればよいですか?

たとえば、calendar.get(Calendar.DAY_OF_WEEK);は3を返します。これは火曜日を意味します。さて、その週の金曜日、またはその週の他の日についてお話ししたいと思います。どうやってやるの?

お返事ありがとうございます。シナリオをもっと明確にする必要があると思います。基本的に、私は指定された期間中、システムで電子メールアラートを無効にしようとしています。次のような値を取得します。disableStart = "FRIDAY-19:00" disableEnd = "SUNDAY-19:00"

ここで、特定の時間に電子メールを送信する必要があるかどうかを確認する必要があります。例えば今日=木曜日ならいつでもメールを送信できますが、今日=土曜日ならいつでも上記の値に従って送信できません。

10
Anubhav Anand

私が正しく理解していれば、Calendar.set(Field、value)メソッドを使用できます。

SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy");
Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(f.format(c.getTime()));

出力を生成します

6
08-10-2010
3
05-10-2010
25
Kevin D
Calendar c = Calendar.getInstance();
Date date = new Date();
c.setTime(date);
System.out.println("Today:  " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("MONDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
System.out.println("TUESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
System.out.println("WEDNESDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println("THURSDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
System.out.println("FRIDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
System.out.println("SATURDAY: " + c.getTime());
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
System.out.println("SUNDAY: " + c.getTime());

与える:

Today:  Fri Oct 08 15:45:14 CEST 2010
MONDAY: Mon Oct 04 15:45:14 CEST 2010
TUESDAY: Tue Oct 05 15:45:14 CEST 2010
WEDNESDAY: Wed Oct 06 15:45:14 CEST 2010
THURSDAY: Thu Oct 07 15:45:14 CEST 2010
FRIDAY: Fri Oct 08 15:45:14 CEST 2010
SATURDAY: Sat Oct 09 15:45:14 CEST 2010
SUNDAY: Sun Oct 10 15:45:14 CEST 2010

つまり、少なくとも私のシステムでは、週は月曜日に始まります。

6
Maurice Perry

答えをくれたケビンとモーリスに感謝します。彼らは本当に私に出発点を与えました。

誰かを助けるために、私はこのテストコードで終わりました。

private static Date getTimeForAnyDayInWeek(int nDay, int nHour, int nMin)
{
    Calendar c = Calendar.getInstance();
    c.setFirstDayOfWeek(Calendar.MONDAY);
    Date date = Calendar.getInstance().getTime();
    c.setTime(date);
    c.set(Calendar.DAY_OF_WEEK, nDay);
    c.set(Calendar.HOUR_OF_DAY, nHour);
    c.set(Calendar.MINUTE, nMin);
    return c.getTime();
}

public static void main(String[] args)
{
    Date start = getTimeForAnyDayInWeek(6, 19, 00);
    Date end = getTimeForAnyDayInWeek(8, 19, 00);
    Date c = new Date();

    if (start.before(c) && c.before(end))
        System.out.println("BLOCK");
    else
        System.out.println("SEND");
}

ありがとう、Anubhav

2
Anubhav Anand

cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

2
jarnbjo

これは jodatime がとても良い理由の完璧な例です、これが私の類似のコードです

  DateTime dt = new DateTime(); //current datetime, jodatime format
  DateTime fridayLastWeek = dt.minusWeeks(1).dayOfWeek().setCopy("Friday");
  Date convertedtorubbishdateformat = fridayLastWeek.toDate();

以前は標準のJava日付/カレンダーを使用していたので、多くの時間を浪費していました。それから私はjodatimeを手に入れました、あなたは後悔しません、それは明らかに標準Javaの一部として将来使用されるでしょう。私は何年もの間瓶をひどく悩ませませんでした、私がやっていたら良かったのですが、あなたはそれを後悔しません。

2
NimChimpsky