2016-12-05 29 views
2

私は、日曜日から次の日曜日までに8日間フライトをしようとしています。カレンダー日曜日から日曜日

私が今実装した方法は、選択した日付からフォームを開始して7日間表示することです。

// set up calendar for sunday 
Calendar sunday = Calendar.getInstance(); 
sunday.setTime(form.getDate()); 
sunday.add(Calendar.DAY_OF_WEEK, -1 * (sunday.get(Calendar.DAY_OF_WEEK) - 1)); 

//set up calendar for next saturday 
Calendar saturday = Calendar.getInstance(); 
saturday.setTime(sunday.getTime()); 
saturday.add(Calendar.DAY_OF_WEEK, 7); 

DAY_OF_WEEKの最大は7であるので

、どのような私の代わりに使用する必要がありますか? 私は、この行を変更してみました:以下のいずれかに

saturday.add(Calendar.DAY_OF_WEEK, 7); 

を:

saturday.add(Calendar.DATE, 8); 

私はすでにカップルの変化が、運を試してみました。 アドバイスはありますか?

+1

あなたは 'DAY_OF_YEAR'を試みたことがありますか? –

+0

ちょうど試しましたが、変更されませんでした – Samarland

+0

追加するとどうなりますか?例外? – MordechayS

答えて

2

Calendar.DAY_OF_YEARを試してみてください。

import java.text.*; 
import java.util.*; 

DateFormat dateFormat = new SimpleDateFormat("EEE, MMM dd, yyyy hh:mm:ss a z"); 
Calendar sunday = new GregorianCalendar(); 

sunday.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); // Set day of week to Sunday. 

System.out.println(dateFormat.format(sunday.getTime())); 

sunday.add(Calendar.DAY_OF_YEAR, 7); // Add seven days. 

System.out.println(dateFormat.format(sunday.getTime())); 

あなたはコピーを作成することにより、既存のものを変更することなく、新しいカレンダーオブジェクトを作成することができ、出力

Sun, Dec 04, 2016 11:47:32 PM EST 
Sun, Dec 11, 2016 11:47:32 PM EST 

import java.text.*; 
import java.util.*; 

public class CalendarUtils { 
    public static void main(String[] args) { 
     Calendar sunday = CalendarUtils.getThisSundaysDate(); 
     Calendar saturday = CalendarUtils.daysFrom(sunday, 6); 

     CalendarUtils.printDates(sunday, saturday); 
    } 

    public static Calendar getThisSundaysDate() { 
     Calendar sunday = new GregorianCalendar(); 
     sunday.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); 
     return sunday; 
    } 

    public static Calendar daysFrom(Calendar cal, int days) { 
     Calendar newCal = copyCalendar(cal); 
     newCal.add(Calendar.DAY_OF_YEAR, days); 
     return newCal; 
    } 

    public static Calendar copyCalendar(Calendar cal) { 
     Calendar copy = new GregorianCalendar(); 
     copy.setTime(cal.getTime()); 
     return copy; 
    } 

    public static void printDates(Calendar from, Calendar to) { 
     DateFormat dateFormat = new SimpleDateFormat("EEE, MMMM dd, yyyy hh:mm:ss a z"); 

     System.out.println(dateFormat.format(from.getTime())); 
     System.out.println(dateFormat.format(to.getTime())); 
    } 
} 
+0

自分のクラスを作成する必要はないと思います。 – Samarland

+0

@Samarlandこのクラスは、[最小限の、完全で検証可能な例](/ help/mcve)を表示するためにここにあります。 –

2

Java 8を使用している場合は、新しいjava.timeクラスを使用する必要があります。この場合、LocalDateクラスとTemporalAdjustersクラスを使用し、そのメソッドにはprevious(DayOfWeek)メソッドを使用します。

また、参照日が日曜日の場合にどうなるかに応じて、previousOrSame(DayOfWeek)を使用してください。

例では、基準日として今日を使用して:

LocalDate refDate = LocalDate.now(); 
LocalDate prevSunday = refDate.with(TemporalAdjusters.previous(DayOfWeek.SUNDAY)); 
LocalDate nextSunday = prevSunday.plusDays(7); 

DateTimeFormatter fmt = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL); 
System.out.println("Ref. Date: " + refDate.format(fmt)); 
System.out.println("Prev. Sunday: " + prevSunday.format(fmt)); 
System.out.println("Next. Sunday: " + nextSunday.format(fmt)); 

出力

Ref. Date: Monday, December 5, 2016 
Prev. Sunday: Sunday, December 4, 2016 
Next. Sunday: Sunday, December 11, 2016 
+0

このコードをテストすると、日曜日から水曜日を表示します.Calendar sunday = new GregorianCalendar(); sunday.set(Calendar.DAY_OF_WEEK、Calendar.SUNDAY); //曜日を日曜日に設定します。カレンダーの土曜日=新しいGregorianCalendar(); saturday.add(Calendar.DAY_OF_YEAR、3);リストフライト= flightService.findFlights(sunday.getTime()、saturday.getTime()); – Samarland

+0

@Samarlandコメントにコードを投稿しないでください。質問の説明がある場合は、質問を編集します。また、なぜあなたはこの答えに 'カレンダー'コードを掲示していますか? – Andreas

関連する問題