データベースに java.sql.Timestamp として日付を保存しています。日付は「2010-01-20T19:10:35.000Z」で、1264014635743 ミリ秒に相当します。
どういうわけか、日付は開発マシンと比較して製品マシンで異なる形式になっています。
日付をフォーマットするコードは次のとおりです。
private final static String DATE_FORMAT = "yyyy-MM-dd";
public final static SimpleDateFormat APP_DATE_FORMATER = new SimpleDateFormat(DATE_FORMAT);
private static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("Etc/UTC");
APP_DATE_FORMATER.setTimeZone(UTC_TIMEZONE);
DateTimeZone.setDefault(DateTimeZone.UTC);
String output = APP_DATE_FORMATER.format(date)
dev で生成された出力は、正しい "2010-01-20" です。しかし、製品には「2010-01-21」があり、1日後です!
もちろん、prodサーバーでエラーが発生するため、デバッグオプションは限られています...
再確認しましたが、両方のサーバーの時刻とタイムゾーンが同じです。両方のクロックは ntp サーバーと同期されます。
[更新] prod のデータベースの値は、日付フィールドの「10-01-20 19:10:35,743000000」です。