ApexのAddmonths(x)面白い現象

1 ApexCodeで、下記ソースを書きました
2 // 月頭のLocal日付を定義する(Asia/Japan)
3 Date startDt = Date.parse(‘2012/03’ + ‘/31’);
4 // 書式化するため、DateTime定義します(Local TimeZone)
5 DateTime formatter = DateTime.newInstance(startDt , Time.newInstance(0,0,0,0));
6 formatter = formatter.addMonths(6);
7 System.debug(formatter.format(‘yyyy/MM/dd));
予想は2012/09/30を表するべき、実際は 2012/10/01を表示されました
原因調べると、 5行目のformatter定義する場合、LocalTimeZoneで2012/03/31:00:00:00で変数定義します
6行目Apex計算する場合、先に formatter はGMT (2012/03/30:15:00:00)に変更して、+6ヶ月で計算しました
そすると、計算結果は GTMの 2012/09/30:15:00:00になりました、format関数で、Local変更すると、2012/10/01を表示しました
———————————————————————————–
一回対応しました
5行目定義する場合、DateTime formatter = DateTime.newInstance(startDt , Time.newInstance(0,0,0,0));
->
DateTime formatter = DateTime.newInstanceGMT(startDt , Time.newInstance(0,0,0,0));で定義する

コメントを残す

メールアドレスが公開されることはありません。