GregorianCalendar
そこで私は、プログラムが日付文字列をオブジェクトに変換し、書式を設定し、完了したら文字列として返すようにするこの (あるべき) 簡単な演習について頭を悩ませてきました。
これは、ファイルからテキストのチャンクを取り込み、それを個々のレコードに分割し、次にレコードを個々のデータに分割して人物オブジェクトに割り当てるプログラムの最後の部分です。
複数の場所でコードをチェックしましたが、コードは、フォーマット関数を呼び出すまで、本来の動作を正確に実行しますIllegalArgumentException
。オブジェクトには、GergorianCalendar
割り当てられるはずの値が割り当てられます (ただし、以下に示すように、印刷はまったく別の話です...) が、フォーマットはオブジェクトの書式設定を受け入れません。
GregorianCalendar
残念ながら、講師はandの使い方がよくわからずSimpleDateFormat
(まだ私たちに彼らと一緒に作業するように割り当てられていました)、「Google で検索してみてください…」と言いました。
私がこれまでに持っているコードは次のとおりです。
public class DateUtil {
public static GregorianCalendar convertFromDMY(String dd_mm_yy) throws ParseException{
// this actually works, got rid of the original code idea
String[] splitDate = dd_mm_yy.split("-");
int days = Integer.parseInt(splitDate[0]);
int month = Integer.parseInt(splitDate[1]);
int year = Integer.parseInt(splitDate[2]);
// Dates are going in right, checked in print statement,
// but the object is not getting formatted…
GregorianCalendar dateConverted = new GregorianCalendar(year, month, days);
format(dateConverted);
return dateConverted;
}
public static String format(GregorianCalendar date){
SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");
String dateFormatted = fmt.format(date);
return dateFormatted;
}
}
私が得るエラーは次のとおりです。
スレッド「メイン」での例外 java.lang.IllegalArgumentException: 指定されたオブジェクトを日付としてフォーマットできません java.text.DateFormat.format(DateFormat.java:281) で java.text.Format.format(Format.java:140) で lab2.DateUtil.format(DateUtil.java:26) で lab2.DateUtil.convertFromDMY(DateUtil.java:19) で lab2.Lab2.createStudent(Lab2.java:75) で lab2.Lab2.main(Lab2.java:34)
もう1つ、私はGregorianCalendar
権利を使用していますか?? そのオブジェクトの値を出力すると (日付を取得する必要がありますよね?)、次のようになります。
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="アメリカ/バンクーバー",offset=-28800000,dstSavings=3600000,useDaylight =true,transitions=189,lastRule=java.util.SimpleTimeZone[id=アメリカ/バンクーバー,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8, startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?, YEAR=1985,MONTH=4,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=22,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND= 0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]
year、month、day_of_month の値は、作成時に渡した数値であるため、すべて正しいです。
考え、提案、私は親しいですか?
編集
元の問題は解消されました (assylias に感謝します!) が、2 つの関数がリンクされておらず、要件がGregorianCalendar
person オブジェクトから日付値を出力する必要があるため (生年月日が a であるため)、まだ正しく印刷できませんGregorianCalendar
。
更新されたコード:
public class DateUtil {
static SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");
public static GregorianCalendar convertFromDMY(String dd_mm_yy) throws ParseException{
// this actually works, got rid of the original code idea
String[] splitDate = dd_mm_yy.split("-");
int days = Integer.parseInt(splitDate[0]);
int month = (Integer.parseInt(splitDate[1]) - 1);
int year = Integer.parseInt(splitDate[2]);
// dates go in properly
GregorianCalendar dateConverted = new GregorianCalendar(year, month, days);
String finalDate = format(dateConverted);
return ;
}
public static String format(GregorianCalendar date) throws ParseException{
fmt.setCalendar(date);
String dateFormatted = fmt.format(date.getTime());
System.out.println(dateFormatted);
return dateFormatted;
}
}
最終編集
わかりました、それで私はばかで、2 つのDateUtil
関数を一緒にリンクする必要はありませんでしたが、それらをタンデムで使用しているようです。まず、生年月日を に変換し、GregorianCalendar
それを person オブジェクトに格納します。次に、print ステートメントで、印刷時にその日付をフォーマットするようにプログラムに指示するだけです。問題は解決しました。DateUtil
すべてが仕様どおりに機能するようになりました。クラスの最終日かそこらで、それらを同時に機能させようとして、水から出た魚のようにバタバタしていたので、私はずっとばかげていると感じています。
日付を適切に入力するためのすべての助けに感謝します!