3

設定に応じて Location Manager を定期的に使用して位置情報を取得しています。テストケースでは 2 分、location.geTime() メソッドを使用しようとしています。LocationManager.getLastKnownLocation() を使用していません。ドキュメントにはUTC時間であると書かれており、以下のように現地時間に変換しました:

Date d = new Date(location.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyMMddkkmmss';
sdf.setTimeZone(TimeZone.getTimneZone("UTC");
sdf.format(d);

しかし、私は期待したものとは異なる日付を取得しています。私が書いている現在の時間は約130516155000(2013-05-16 15:50:00)ですが、040015130515を取得しています。タイムゾーンを削除し、タイムゾーンを「GMT」として設定し、日付を修正しましたが、時間はかなり異なっていました. 実機とエミュレータは同じです。そして、両方のタイムゾーン設定を既に確認しましたが、それらは正しいです。何が足りないのか教えてください。

ありがとう。

編集:

さらに追加します。

Log:
05-16 16:09:30.227: D/location.getTime()(1279): 1368590417000
05-16 16:09:30.237: D/NMEAGPRMCTime(1279): 040017
05-16 16:09:30.247: D/NMEAGPRMCDate(1279): 130515

コード:

public static String NMEAGPRMCTime(Date d)
{
    SimpleDateFormat sdf = new SimpleDateFormat("kkmmss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String result = sdf.format(d);
    Log.d("NMEAGPRMCTime", result);
    return result;
}


public static String NMEAGPRMCDate(Date d)
{
    SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    String result = sdf.format(d);
    Log.d("NMEAGPRMCDate", result);

    return result;
}

それでおしまい。これはまさに私が使用しているコードです。

4

1 に答える 1

10

ここでのフォーマットにはまったく問題はありません。

ログを見てください:

05-16 16:09:30.227: D/location.getTime()(1279): 1368590417000
05-16 16:09:30.237: D/NMEAGPRMCTime(1279): 040017
05-16 16:09:30.247: D/NMEAGPRMCDate(1279): 130515

epochconverterを使用すると、1368590417000 の「エポックからのミリ秒」値が実際には 2013 年 5 月 15 日 04:00:17 UTC であることがわかります。したがって、時刻 040017 と日付 130515 は正確です。

私はあなたが実際に何をしているのか混乱していると思いますLocation.getTime().現在の時刻ではなく、修正の時刻を返します. したがって、基本的に、現在の日付/時刻に関係なく、その場所は 04:00:17 UTC に取得されました。

于 2013-05-16T07:19:35.483 に答える