7

私はインターネットでいくつかの調査を行いましたが、まだ混乱しています。UNIX 時間は GMT/UTC のような世界時ですか、それとも現地時間のように場所によって異なりますか?

UNIX 時間は 1970 年 1 月 1 日 00:00:00 GMT からカウントされることを知っています。Java で getTime() 関数 (具体的には Date d= new Date(); long currentTime d.getTime()) を使用すると、UNIX の時間がミリ秒単位で取得されます。では、A さんと B さんが 2 つの異なるタイム ゾーンにいる同じ機能を使用した場合、同じ結果が得られるでしょうか?

4

2 に答える 2

10

では、A さんと B さんが 2 つの異なるタイム ゾーンにいる同じ機能を使用した場合、同じ結果が得られるでしょうか?

はい、そうします - もちろん、両方の時計が「正しい」と仮定します。

クラスは基本的に「java.util.Dateミリ秒単位の Unix エポックからの時間」のラッパーです。Unix エポックが時間の瞬間であったことを考えると(「1970 年 1 月 1 日の真夜中」だけでなく、経過したミリ秒の数はどこにいても同じです。(相対性と閏秒の議論は無視します...)

(補足: Unix エポックでは、グリニッジの真夜中ではありませんでした。英国は当時 BST を観察していたため、午前 1 時でした。これは英国夏時間ではなく、英国標準時です英国は UTC+1 でした。 1968 年 2 月 18 日から 1971 年 10 月 31 日まで。より類似したトリビアについては、Noda Time ユーザー ガイドのトリビア ページを参照してください。)

于 2015-04-23T07:18:19.843 に答える
4

Jon Skeetの答えは正しいです。いくつかの考えを追加します。

Unix 時間は、人によって意味が異なります。ウィキペディアの記事で説明されているように、基本的な考え方は通常、エポックからの秒数であり、エポックUTCタイム ゾーンでの 1970 年の最初の瞬間です。名前が示すように、タイム トラッキングへのこのアプローチは、Unix ライクなオペレーティング システムで使用されていました。

地域性

地方によって違うの?いいえ。定義上、UTC タイム ゾーンを表します。したがって、Unix 時間での瞬間は、オークランドパリ、およびモントリオールでの同じ瞬間を意味します。UTinUTCは「ユニバーサル タイム」を意味します。

Unix の時間はどこでも使用されるという意味で普遍的ですか? いいえ、そうではありません。

粒度

まずは粒度。コンピューターのクロック チップがより正確になるにつれて、従来のコンピューター システムはミリ秒マイクロ秒、さらにはナノ秒単位で時間を追跡するようになりました。ソフトウェアが異なれば、タイム トラッキングの粒度も異なります。java.util.Date/.Calendar クラスとJoda -Timeライブラリは両方ともミリ秒の解像度を使用しますが、Java 8 に組み込まれた新しいjava.time パッケージはナノ秒の解像度を想定しています。Postgreなどの一部のデータベースは、通常、マイクロ秒の解像度を前提としています。

整数秒からナノ秒までの時間追跡の粒度の図。

質問を引用するには…</p>

UNIX時間をミリ秒単位で取得しています

従来の Unix 時間または POSIX 時間はミリ秒単位ではなく秒単位で追跡されるため、技術的には矛盾しています。

時代

第二に、エポック。1970 年の最初の瞬間は、さまざまなコンピューター システムで使用された唯一の時代ではありません。数十のエポックが使用されており、一部は非常に広く使用されています。たとえば、Microsoft Excel と Lotus 1-2-3 スプレッドシート、CocoaGPS衛星、Galileo衛星、DOS と FAT ファイル システム、および ntp (ネットワーク タイム プロトコル) は、それぞれ 1899 年から 2001 年までの異なるエポックを使用しています。

エポックからのカウントを避ける

一般に、エポックからミリ秒 (または任意の粒度) をカウントして、日時の値の処理に集中することは避けるのが最善です。このような値は、人間が読み取ったり理解したりするのが難しいため、デバッグが困難になり、間違いが目立たなくなります。上記で説明した粒度および/またはエポックに関する仮定から生じる可能性のある間違いを追加します。

代わりに、まともな日時ライブラリを使用してください。Java では、次のいずれかを意味します。

7 ビットまたは 8 ビットのグループを収集してテキストを追跡しますか? いいえ、クラスとライブラリを使用して、文字セットや文字エンコーディングなどを処理する重労働を行います。日時作業についても同じことを行います。

于 2015-04-24T00:52:51.587 に答える