0

ユーザーにタイムスタンプを表示する方法を確認したいだけです。システムのタイムスタンプは、送信された日付、タイムスタンプ、特定のアクションやイベントが発生したときなど、UTCで保存されます。

私は今いくつかのテストを行っています。クエリを実行してUTCタイムスタンプのリストを文字列として取得し、それをカレンダーフォームに取得したいと思います。私はこれをやっています:

someTimeStamp = Calendar.getInstance();
long l = Long.valueOf(stringTimeStampFromDBViaJson);
someTimeStamp.setTimeInMillis(l);

たとえば、UTCでDBから返される値は次のとおりです。

2012-09-18 19:36:23.950
2012-09-18 19:31:55.193

だから私の電話はESTにあり、次のようにまっすぐに表示されています

18 September, 2012 03:36:23 PM
18 September, 2012 03:31:55 PM

それが私が欲しいものです。これが私が信頼できる振る舞いであるかどうか疑問に思っています。

4

1 に答える 1

2

特に明示的に定義しない限り、すべてのJavaスタンプは、Unixエポック(1970年1月1日)以降のUTC時刻と日付を表します。システムコール(つまり、Android / GoogleライブラリのAPIコール)を使用する場合は、これらがローカルかUTCかを知る必要がありますが、通常はAPIプロトタイプから簡単に見分けることができ、私の経験では「十分に」文書化されています。

私は現在、UTC、GMT、ローカルを混在させる必要のあるプロジェクトに取り組んでおり、すべてのスタンプは、エポックからのミリ秒UTCとして内部的に表示されます。ユーザーに表示する場合にのみ、タイムゾーンが考慮されます。私はCalendarクラスをDTGの表現と計算にのみ使用しており、正確で信頼できることがわかりました。

次のようなメソッドを含むヘルパークラスもあります

long startOfDayUsingPrefs(long millis) 

long startOfDay(long millis).  

前者は、ユーザーが設定した設定に応じて、今日のUTCまたは現地時間の午前0時以降の最初のティックのタイムスタンプを返します(ローカルタイムゾーンまたはUTCを使用)。後者は常にUTCです。

お役に立てれば..

于 2012-09-18T20:05:33.233 に答える