それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

java で日付の変換。文字型日付型の変換

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()を使って変換する。

文字列→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が発生する
http://www.ne.jp/asahi/hishidama/home/tech/java/date.html

Exceptionにならないので、エラー位置を見直して,もう一度挑戦できる.