Unix時間とは何ですか?Unixエポックはいつでしたか?

Unix時間とは何ですか?Unixエポックはいつでしたか?

Unixに独自の時間の概念があるのはなぜですか?エポックとは何ですか?Y2038問題は何ですか?





Unix時間は、Linux、macOS、および他の多くの相互運用可能なシステムで使用される特定の日付と時刻を表す手段です。非常に普及しているため、おそらく気付かないうちに使用しているでしょう。ただし、Unix時間を理解すると、さまざまな状況でそれを見つけることができます。いくつかのツールは、Unix時間での作業に役立ちます。





Unix時間の目的は何ですか?

Unix時間は、固定された日時からの合計秒数です。これは、人間が読み取れる日付と時刻とは異なって見える日付/時刻(またはタイムスタンプ)形式です。これは純粋に効率上の理由によるものです。年、月、時間などの個別の値を格納するよりも、秒を表す単一の数値を格納する方がはるかに少ないスペースで済みます。





もちろん、現代的には、スペースの違いはそれほど大きくありません。しかし、Unixは、利用可能なストレージがはるかに小さかった1960年代後半に始まったと考えてください。タイムスタンプも頻繁に使用されるため、それらのストレージは合計されます。たとえば、すべてのファイルには3つのタイムスタンプが関連付けられています。

あなたが数学の天才でない限り、このフォーマットを頭の中で翻訳することはほとんど不可能です。しかし、それでも、次のようなより読みやすい代替手段に比べていくつかの利点があります。 2015年10月21日水曜日07:28:00GMT 。一目で、2つのUnixタイムスタンプを非常に簡単に注文できます。また、通常、2つのタイムスタンプの違いを理解する方が簡単です。これは、隣接する日など、互いに近い日付に特に当てはまります。



エポックについて

したがって、Unix時間は、特定の時点からの合計秒数です。しかし、その時点は何ですか?これは 00:00:00 UTC オン 1970年1月1日 。これは、Unixエポックと呼ばれることがよくあります。プログラマーは、Unix時間を発明したときに最も近いラウンド日付であったため、便宜上、この日付をエポックとして選択しました。

何かがうまくいかなかったときに、この日付を見たことがあるかもしれません。明らかにバグですが、私たちの多くが生まれる前の日付になると、非常に奇妙に見えます。ただし、Unix時間について知っていれば、それは完全に理解できます。システムが値のないタイムスタンプを表示しようとすると、多くの場合0に変換され、正確なエポック日付になります。





近くの子犬はどこで買えますか

Unix時間データ形式

厳密に言えば、1つはありません。元のデータ型は32ビット整数でしたが、はるかに強力なシステムでも、これが当てはまることがよくあります。

このデータ型を使用すると、値に合計2 ^ 32秒を格納できます。これは、136年強です。この値は通常、符号付きです。つまり、負または正の値になります。したがって、それは通常、エポックの両側、つまり1902-2038で68年を表します。





もちろん、これはまだ限られた期間です。ただし、タイムスタンプ形式の主な用途は、ファイルの変更などの概念でした。古代の歴史や遠い未来ではなく、現在に近い時間を表す必要がありました。カレンダーなどのアプリケーションの場合でも、数十年以上先の日付を表す必要はめったにありません。

しかし、それはこの限られた期間に問題がないという意味ではありません…

2038年問題

Y2Kバグ(歴史上最悪のプログラミングミスの1つ)は、年を2桁の値として保存するコンピューターシステムに影響を及ぼしました。 2000年になると、そのようなシステムは1900年のように扱いました。この場合、多くの人が事前に準備に多くの時間と労力を費やしたことが主な理由で、これは恐れられるほど壊滅的なものではありませんでした。

前のセクションで注意を払っていた場合は、Unix時間に影響を与える可能性のある同様の問題を発見した可能性があります。ええと、Unix時間にはそれ自身のデータ問題があります:Y2k38問題。 (これはバグではなく問題と呼ばれることがよくあります。2000年以降、楽観的になっているかもしれません!)2038年にUnix時間が文字通りなくなると、システムは新しい日付を1902または1970として扱います。完全に失敗するだけです。

少なくとも、この問題は大晦日の真夜中のストロークでは発生しません。 32ビットUnix時間の最後の秒は、3月19日になります。最終的には、2038年までにほとんどのシステムをアップグレードするか、いずれにせよそれまでに廃止される可能性があります。

いくつかの便利なタイムスタンプリソース

NS エポックコンバーター サイトはおそらく利用可能な最も包括的なタイムスタンプコンバータです。まず、現在のUnix時間をリアルタイムで表示し、その上に考えられるほぼすべての機能を追加します。その主な用途は、タイムスタンプと人間が読める形式の日付を双方向で変換することです。

Dan’s Toolsは、便利なWebアプリの膨大なコレクションであり、そのうちの1つは タイムスタンプコンバータ 。より基本的ですが、非常にすっきりとしたプレゼンテーションで使いやすいです。

Time.is 別の、さらにミニマルな外観を提示します。 Unix時間を含む、さまざまな形式で時間を表示します。ページタイトルに現在の時刻が含まれているので便利です。

コマンドラインツールでのUnixTimeの使用

LinuxとmacOSでは、 日にち プログラムは、Unixタイムスタンプを含む日付/時刻を処理するためのコアユーティリティです。引数なしで呼び出されると、現在の日付/時刻が人間が読める形式で返されます。

$ date
Wed Feb 10 12:28:30 GMT 2021

Unix時間の現在の日付/時刻が必要な場合は、 +%s 口論:

$ date +%s
1612960114

人間が読める日付からタイムスタンプに変換するには、 -NS お使いのバージョンの場合はフラグを立てます 日にち それをサポートします。ほとんどのLinuxバージョンは、デフォルトで次のようになっているはずです。

$ date -d 'Jan 2 1970' +%s
82800

macOSでは、 日にち は別のプログラムであり、別のフラグのセットが必要です。

$ date -j -f '%b %d %Y %T' 'Jan 02 1970 00:00:00' '+%s'
82800

反対方向に進むと、Unixタイムスタンプから変換できます。 -NS 国旗:

$ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

他のいくつかのプログラムは %NS Unix時間を処理するためのフォーマット。たとえば、ファイルの変更日をUnix時間で表示する場合は、 Linuxバージョンの ls 、次を使用できます。

$ ls -l --time-style=+%s index.tmp.html
-rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

プログラミング言語でUnix時間を使用する方法

PHPには 時間() 現在のUnixタイムスタンプを返す関数。これは 日にち() 関数は、2番目の引数としてタイムスタンプを取ります。

$ php -r 'echo date('Y-m-d', time());'
2021-02-11

JavaScriptは興味深い方法で物事にアプローチします。それは持っています Date.now() Unixエポックからのミリ秒数を取得するメソッド。もちろん、これを1,000で割り、結果を四捨五入して、同等のUnix時間を秒単位で求めることができます。

> Math.floor(Date.now() / 1000)
1613083012

Unix時間を理解する

Unix時間は、多くの場所で発生する単純な概念です。一度理解すれば、たとえば時差を計算するときに非常に役立つことがあります。また、それが特定のバグの原因である可能性がある場合も認識できます。

エポックやタイムスタンプなどの概念は、Linuxを使い始める上で重要な部分です。次のような必需品についてもっと知るために ls 、基本的なLinuxコマンドのガイドをご覧ください。

共有 共有 つぶやき Eメール Linuxを使い始めるための9つの基本コマンド

Linuxに精通したいですか?これらの基本的なLinuxコマンドから始めて、標準的なコンピューティングタスクを学びます。

次を読む
関連トピック 著者について ボビージャック(58の記事が公開されました)

ボビーは、20年のほとんどの間ソフトウェア開発者として働いた技術愛好家です。彼はゲームに情熱を注いでおり、Switch Player Magazineのレビュー編集者として働いており、オンラインパブリッシングとウェブ開発のあらゆる側面に没頭しています。

ボビージャックのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください