[apex]Date型のフォーマット

何回かググっているので、備忘録。

Date型のフォーマットは一応用意されているが、フォーマット内容を指定が出来ないよう。

1
2
3
4
Date d = Date.newInstance(2015, 4, 10);
System.debug(d); //2015-04-10 00:00:00
String d_str = d.format();
System.debug(d_str); //2015/04/10

format('yyyy-MM-dd')とか書くと怒られる。
Date Class – format()

代わりにDatetime型の場合はフォーマットを指定して出力が可能。
なので、Date型のものをフォーマット指定して出力したい場合は、一度Datetime型に変換してやる必要がある。

apexのDatetime型の扱いには注意が必要で、そのまま変換してDatetime型のまま使用しているとタイムゾーンが標準時になって9時間戻ってしまう。
ただしそれをフォーマットして文字列にするとまた元に戻る。 指定するならする、しないならしない、で統一しているとややこしくならなくてすみそう。

1
2
3
4
5
6
Date d = Date.newInstance(2015, 4, 10);
System.debug(d);  //2015-04-10 00:00:00
Datetime dt = Datetime.newInstance(d.year(), d.month(), d.day());
System.debug(dt);  //2015-04-09 15:00:00
String dt_str = dt.format('yyyy-MM-dd');
System.debug(dt_str);  //2015-04-10

参考

Date Class – format()
Datetime Class – format(string)
validation – Salesforce Apex: Validating date for format and value – Stack Overflow

   このエントリーをはてなブックマークに追加