4

ミリ秒を GMT 日付に変換する必要があります (Android アプリで)。例:

1372916493000

このコードで変換すると:

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
cal.setTimeInMillis(millis);
Date date = cal.getTime();

結果は07:41 07/04/2013です。私がちょうど使用した場合、結果は同じです:

Date date = new Date(millis);

残念ながら、結果は間違っているように見えます。私の現地時間のようです。このサービスで同じ数値を変換しようとしましたが、結果は05:41 07/04/2013で、正しいと思います。だから私は2時間の違いがあります。私の変換の何が問題なのか、誰か提案/ヒントがありますか?

4

5 に答える 5

14

結果が正しくないように見える場合でも、日付はローカル タイムゾーンの文字列表現に変換されるSystem.out.println(date)ため、驚くことではありません。Date.toStringGMT で結果を表示するには、これを使用できます

SimpleDateFormat df = new SimpleDateFormat("hh:ss MM/dd/yyyy");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
String result = df.format(millis);
于 2013-07-04T15:00:40.473 に答える
2

変換中にホーム タイムゾーンと UTC タイムゾーンを間違えたようです。

あなたがロンドンにいて (現在、ロンドンは GMT より 1 時間進んでいます)、ミリ秒はあなたのホーム タイムゾーン(この場合はロンドン) の時間です。

次に、おそらく次のことを行う必要があります。

Calendar cal = Calendar.getInstance();
// Via this, you're setting the timezone for the time you're planning to do the conversion
cal.setTimeZone(TimeZone.getTimeZone("Europe/London"));
cal.setTimeInMillis(1372916493000L);
// The date is in your home timezone (London, in this case)
Date date = cal.getTime();


TimeZone destTz = TimeZone.getTimeZone("GMT");
// Best practice is to set Locale in case of messing up the date display
SimpleDateFormat destFormat = new SimpleDateFormat("HH:mm MM/dd/yyyy", Locale.US);
destFormat.setTimeZone(destTz);
// Then we do the conversion to convert the date you provided in milliseconds to the GMT timezone
String convertResult = destFormat.parse(date);

私があなたの主張を正しく理解しているかどうか教えてください。

乾杯

于 2013-07-04T14:57:26.633 に答える
1

これを試して

public class Test{
    public static void main(String[] args) throws IOException {
        Test test=new Test();
        Date fromDate = Calendar.getInstance().getTime();
        System.out.println("UTC Time - "+fromDate);
        System.out.println("GMT Time - "+test.cvtToGmt(fromDate));
    }
    private  Date cvtToGmt( Date date )
        {
           TimeZone tz = TimeZone.getDefault();
           Date ret = new Date( date.getTime() - tz.getRawOffset() );

           // if we are now in DST, back off by the delta.  Note that we are checking the GMT date, this is the KEY.
           if ( tz.inDaylightTime( ret ))
           {
              Date dstDate = new Date( ret.getTime() - tz.getDSTSavings() );

              // check to make sure we have not crossed back into standard time
              // this happens when we are on the cusp of DST (7pm the day before the change for PDT)
              if ( tz.inDaylightTime( dstDate ))
              {
                 ret = dstDate;
              }
           }

           return ret;
        }
}

テスト結果:
UTC 時間 - 2012 年 5 月 15 日火曜日 16:24:14 IST
GMT 時間 - 2012 年 5 月 15 日火曜日 10:54:14 IST

于 2013-07-04T14:47:04.027 に答える
0

Date date = cal.getTime();

によって作成された日付を返します

public final Date getTime() {
    return new Date(getTimeInMillis());
}

ここでgetTimeInMillis()、TimeZone なしでミリ秒を返します。

私はあなたが望むことをする方法についてここを見ることをお勧めします

于 2013-07-04T14:51:56.997 に答える