1

何度も議論されましたが、私が生成したミリ秒の理由がわかりません:

System.currentTimeMillis();

または:

Calendar.getInstance(TimeZone.getTimeZone("UTC")).getTimeInMillis()

www.epochconverter.comで見たものと同じではありませんか?

必要なのは、具体的な形式を生成することだけStringですが、ミリ秒が正しくないことがわかりました。

念のため、私がそれを行う方法は次のとおりです。

private static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

public static String getCurrentTimestamp() {
        long time = System.currentTimeMillis();
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
        String lastModifiedTime = sdf.format(time);
        Logger.logVerbose(TAG, "Generated timestamp is " + lastModifiedTime);
        return lastModifiedTime;
    }

最終的に得られるのは現地時間だけですが、タイムゾーンと連動しない純粋なUTCの時間だけが必要です。

SQLite で ( を使用してSELECT strftime('%s',timestring);) チェックしたところ、正しいミリ秒が得られました。上記の 2 つのステートメントによって誤って生成されたのはなぜですか? よろしくお願いします。

4

2 に答える 2

1

考慮すべき3つのこと

  • Java はうるう秒を含む UTC をサポートしておらず、GMT のみをサポートしています。これは、OS がサポートしていないためです。
  • 衛星同期デバイスから時間を取得しない限り、ミリ秒は不正確になります。
  • コマンドをまったく同時に実行することはできないため、場合によっては異なる場合があります。

しかし、それよりも重要なことは、tiemzone を設定しない場合、デフォルトのタイム ゾーンが使用されることです。

    SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN);
    // no time zone set so the default is used.
    String lastModifiedTime = sdf.format(time);

代わりに追加する必要があります

    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

形式にa を追加し'Z'ても、形式に追加するだけでタイムゾーンが変更'T'されます。これは、追加した単なる文字です。

于 2013-10-02T14:40:27.197 に答える
0

日付形式で時刻を UTC ゾーンでフォーマットする場合は、次を使用します。

sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
于 2013-10-02T14:41:38.080 に答える