2010-11-28 3 views
1

私は日付と時刻をキャプチャし、ミリ秒単位でサーブレットに送信するモバイルアプリケーションを用意しています。例えば、携帯電話で12:55 AMをキャプチャして私のサーバに送信します。タイムゾーンなしで日付を印刷するにはどうすればよいですか?

したがって、送信されたミリ秒数から日付を構成し、SimpleDateFormatで印刷しますが、時間は異なります。 。 私は2つの異なるタイムゾーンを使用しているため問題があることを知っています。私の質問は どのように同じ時間を表示するためにタイムゾーンを適用せずにその時間を表示できますか?あなたはタイムゾーンを変更するにはカレンダーを使用する必要があるが、そのAPIはありません事前

答えて

3

感謝。

// Change a date in another timezone 
public static Date changeTimeZone(Date date, TimeZone zone) { 
    Calendar first = Calendar.getInstance(zone); 
    first.setTimeInMillis(date.getTime()); 

    Calendar output = Calendar.getInstance(); 
    output.set(Calendar.YEAR, first.get(Calendar.YEAR)); 
    output.set(Calendar.MONTH, first.get(Calendar.MONTH)); 
    output.set(Calendar.DAY_OF_MONTH, first.get(Calendar.DAY_OF_MONTH)); 
    output.set(Calendar.HOUR_OF_DAY, first.get(Calendar.HOUR_OF_DAY)); 
    output.set(Calendar.MINUTE, first.get(Calendar.MINUTE)); 
    output.set(Calendar.SECOND, first.get(Calendar.SECOND)); 
    output.set(Calendar.MILLISECOND, first.get(Calendar.MILLISECOND)); 

    return output.getTime(); 
} 

リンク:http://blog.vinodsingh.com/2009/03/date-and-timezone-in-java.html

私は、これは動作するはずだと思います。私はそれを広範囲にテストしていない。

2

カレンダーオブジェクトと日付オブジェクトは、日付情報をUTCとの関係でミリ秒単位で格納します。

(現在の時刻と深夜の間に、1970年1月1日UTCミリ秒単位で測定された差、、)

これはカレンダー/日付オブジェクトは、異なるタイムゾーンの異なる値を格納しないことを意味します。彼らは常に内部的に同じ値を使用します...フォーマットは通常どおりに変化します。

たぶん、あなたはあなたのローカル/デフォルトのタイムゾーンでのSimpleDateFormatを使用することができます。

SimpleDateFormat sdf = new SimpleDateFormat("S") 
Date d = sdf.parse(milliseconds); 

ます。また、それはあなたの期待される出力と一致するまでにDateFormatのタイムゾーンを変更しようとすることができます。

sdf.setTimeZone(TimeZone.getTimeZone("GMT-8")); 
System.out.println(sdf.toString()); 

sdf.setTimeZone(TimeZone.getTimeZone("GMT-4")); 
System.out.println(sdf.toString()); 
関連する問題