Java で日付をDate型に,Date型を日付フォーマットに変換する方法
"2011-06-14 23:43" <=> Date変換
Date型にするにはちょっとトリッキーな感じでした.
String=>Date
日付文字列のDateへ変換
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse("2007-01-01");
これで出来ます.
Date => String
取得した日時を更に,別のフォーマットにする。
日付を,さらに別の文字列にする。これには、もう一度SimpleDateFormatに通す。
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); String str2 = sdf2.format(new Date());//#=> 2011年06月15日 04時49分
日付変換の罠.Dateクラス
Date 型は全てがobsolute で Deprecatedなのです。Date#getYear()すると、2011 年は111が返ってくるのです.
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = format.parse("2007-01-01"); date.getYear(); // #=> 107
107って何だよ.そう思ったらCalendarクラスを使いましょう
Calendar datetime = Calendar.getInstance(); datetime.setTime(date); cal_date.get(Calendar.MONTH);//月 cal_date.get(Calendar.YEAR);//年http://www.ne.jp/asahi/hishidama/home/tech/java/date.html
Java人には常識だろうけど、Dateの各メソッドは obsoleteで Deprecatedなのです。大事なので二回目.だから日付はCalendarクラスを使うと習います.
だけど、DateFormateを通すためにはDate型が必須.Calendarだとアウト.なにそれ
しかし、DateFormatはnew 出来ない
DateFormateは日付の変換の抽象化クラス。Abstract class 。
そう、日付の変換にはDateFormat実装のSimpleDateFormateをインスタンス化して使う.
ところが、SimpleDateFormatはExcption出すので 使うときはThrow/try-catch必須.
あああもう・・・
変換失敗でException
パースに失敗すると容赦なくExcption。ドコが間違ったが分らない
パース失敗Exceptionを防止する
文字を日付に変換すると,例外が起きる。
これ ParseExceptionを指定するとExceptionにならない
DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); ParsePosition pos = new ParsePosition(0); Date date = df.parse("2008/02/16", pos); System.out.println(pos.getErrorIndex()); //正常終了ならエラー位置は-1 pos = new ParsePosition(0); date = df.parse("2008:02/16", pos); System.out.println(pos.getErrorIndex()); //エラー時はエラーのあった位置(この例だと4)java.text.DateFormat
DateFormatは日付の書式を扱うクラス。
Dateを整形して文字列に変換したり、文字列からDateインスタンスを作ったり出来る。具体的にはSimpleDateFormatに書式文字を指定してインスタンスを作り、parse()やformat()を使って変換する。
http://www.ne.jp/asahi/hishidama/home/tech/java/date.html文字列→Date(エラー時はParseExceptionが発生):
DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); Date date = df.parse("2008/02/16"); // Date date = df.parse("2008/2/1"); //これくらいならエラーにならず正常に変換される // Date date = df.parse("2008:02:16"); //ParseExceptionが発生する
Exceptionにならないので、エラー位置を見直して,もう一度挑戦できる.