ユーザーが日付を選択するまで(年月日)リストを印刷するプログラムを作成する必要があります(end_date
は後でend_cal
に変換されます)。今日は2017-09-30 Saturday
で、ユーザー入力が2017-10-30
とデート場合リストのカレンダー型要素
例えば、プログラムは、これらの日付をプリントアウトする必要があります。
2017年9月30日、2017年10月7日、2017年10月14日、2017- 10-21,2017-10-28。
問題:
- リストを印刷リスト
- にカレンダー型要素を追加します。
- 私はそれを印刷しようとすると、リスト
のほかの印刷時に日付をフォーマットすると、出力は同じ日付の重複のちょうど束です。
public class Weekdays {
static Scanner input = new Scanner(System.in);
static Calendar temp_cal = Calendar.getInstance(); //temporary calendar object. it's value is being chaged in the process
static Calendar start_cal = Calendar.getInstance(); // current day when the program is executed
static Calendar end_cal = Calendar.getInstance(); //end date that the user inputs
static SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
public static boolean date_validation(String date){ //partial validation: whether the input date is in a correct format
Date test_date;
try {
test_date = format.parse(date);
}catch (ParseException e){
return false;
}
return true;
}
//created list of dates that are of the same day of the week (for example all Sundays)
static private List<Calendar> getListOfDates(){
List<Calendar> dates = new ArrayList<>();
while (!((temp_cal.get(Calendar.YEAR)>= end_cal.get(Calendar.YEAR))&&(temp_cal.get(Calendar.MONTH) >= end_cal.get(Calendar.MONTH))&&(temp_cal.get(Calendar.DAY_OF_YEAR) >= end_cal.get(Calendar.DAY_OF_YEAR))))
{
temp_cal.add(Calendar.DATE, 7);
dates.add(temp_cal); }
return dates;
}
static private void printListOfDates(List<Calendar> dates){
System.out.println(Arrays.toString(dates.toArray()));
}
public static void main(String[] str) throws ParseException{
String end_date = input.next();
while(!(date_validation(end_date))){
end_date = input.next();
}
end_cal.setTime(format.parse(end_date));
printListOfDates(getListOfDates());
}
入力:2018/01/01
出力(単なる一例をコピーし、全体の出力は、このだけいくつかの重複である):
java.util.GregorianCalendar [時間= 1515233525518、areFieldsSet =真、ゾーン= sun.util.calendar.ZoneInfo [id = "ヨーロッパ/ヘルシンキ"、オフセット= 7200000、dstSavings = 3600000、useDaylight = true、遷移= 118、lastRule = java.util.SimpleTimeZone [id =ヨーロッパ/ヘルシンキ、オフセット= 7200000、dstSavings = 3600000、useDaylight = true、startYear = 0、startMode = 2、startMonth = 2、start endDayOfWeek = 1、endTime = 3600000、endTimeMode = 2]]、firstDayOfWeek = 2、minimalDaysInFirstWeek = 1、endDayOfWeek = 1、startTimeMode = 2、endMode = 2、endMonth = 9、endDay = 4、ERA = 1、YEAR = 2018、MONTH = 0、WEEK_OF_MONTH = 1、DEE_OF_MONTH = 6、DAY_OF_YEAR = 6、DAY_OF_WEEK = 7、DAY_OF_WEEK_IN_MONTH = 1、AM_PM = 1、HOUR = 0、HOUR_OF_DAY = MINUTE = 12、SECOND = 5ミリ秒= 518、ZONE_OFFSET = 7200000、DST_OFFSET = 0]]
従来の 'java.util.Calendar'クラスを避けることを強く勧められません。代わりに、 'java.time'パッケージでユースケースに適したクラスを見つけるべきです。 –
'Calendar'は' before'と 'after'を比較するメソッドを持っています –
' java.time'パッケージのほとんどのクラス(もしそうでなければ)は 'Comparable'を実装しています。 –