サーバーで生成された特定のログファイルにミリ秒があります。ログファイルが生成されたロケールもわかっています。問題は、ミリ秒を指定された形式の日付に変換することです。そのログの処理は、異なるタイムゾーンにあるサーバーで行われています。"SimpleDateFormat"プログラムへの変換中は、マシンの日付が取得されるため、フォーマットされた日付はサーバーの正しい時刻を表していません。これをエレガントに扱う方法はありますか?
long yourmilliseconds = 1322018752992l;
//1322018752992-Nov 22, 2011 9:25:52 PM
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS",Locale.US);
GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("US/Central"));
calendar.setTimeInMillis(yourmilliseconds);
System.out.println("GregorianCalendar -"+sdf.format(calendar.getTime()));
DateTime jodaTime = new DateTime(yourmilliseconds,
DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Central")));
DateTimeFormatter parser1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss,SSS");
System.out.println("jodaTime "+parser1.print(jodaTime));
出力:
Gregorian Calendar -2011-11-23 08:55:52,992
jodaTime 2011-11-22 21:25:52,992
GregorianCalendar
、SimpleDateFormat
など)と優れたJoda -Timeライブラリの両方が、現在のjava.timeクラスに取って代わられました。