\r\n\r\n

unix時代とは、いつ頃のことなのか?

unix timeはコンピュータが時間を計測するために使用するシステムですが、unix timeの仕組みや「unix時代」とは...。

なぜUnixには独自の時間の概念があるのか、時代とは何か、2038年には何が問題になるのか。

Unix timeは、Linux、macOS、その他多くの相互運用可能なオペレーティングシステムで、特定の日付と時刻を表現する方法です。あまりに広く普及しているので、気づかないうちに使っているかもしれません。しかし、一度Unixの時間について学んだら、多くの文脈でそれを見出すことができます。Unixの時間を利用するためのツールがいくつか用意されています。

ユニックスタイムの目的は何ですか?

Unix時間とは、ある固定された日時からの合計秒数です。これは、私たちが慣れ親しんでいる読みやすい日時とは異なる印象を与える日付/時刻(またはタイムスタンプ)形式である。これは純粋に効率化のためです。秒を表す数値を格納するのは、年、月、時間などの値を個別に格納するよりもはるかに少ないスペースで済みます。

もちろん、現代の視点から見れば、空間の差はまったくと言っていいほどありません。しかし、Unixが生まれたのは1960年代後半で、利用可能なストレージスペースはもっと小さかったことを考えましょう。タイムスタンプも多用されていたので、そのストレージも増えていたでしょう。例えば、各ファイルには3つのタイムスタンプが関連付けられています。

数学の天才でもない限り、この形式を頭の中で翻訳するのはほとんど不可能です。しかし、より読みやすい代替品(Wed, 21 Oct 2015 07:28:00 GMTなど)と比べて、まだいくつかの利点があります。2つのUnixタイムスタンプを一目見て、とても簡単に注文することができます。2つのタイムスタンプの差を計算するのも、通常は高速になります。特に、隣接する日など、日付が似ている場合は、その傾向が強くなります。

この頃

したがって、Unix時間は、ある特定の時点からの合計秒数です。しかし、そのポイントとは何なのか。現在は1970年1月1日00:00:00 UTCです。これはしばしばUnix時代と呼ばれます。プログラマーが便宜上この日をエポックに選んだのは、Unix時間を発明したときに最も近いと思ったからです。

あなたは、うまくいかない一日を見たことがあるかもしれません。明らかにエラーですが、私たちの多くが生まれる前の日付につながると、とても奇妙に見えるものなのですしかし、Unixの時間を理解すれば、これは完全に理解できることです。どのシステムでも、タイムスタンプを値なしで表示しようとすると、通常は0に変換され、正確なカレンダーの日付が生成されます。

ユニックスタイムデータフォーマット

厳密には、いずれも元のデータ型は32ビット整数であり、より高性能なシステムでもそうであることが多い。

このデータ型では、合計2^32秒、つまり136年強の間、値を保存することができる。この値は通常符号付きであり、負または正の値をとることができる。したがって、通常はエポックの両側の68年間、すなわち1902年から2038年までを表す。

もちろん、これはまだ期間限定です。しかし、タイムスタンプ形式の主な用途は、文書の変更などの概念である。遠い歴史や遠い未来ではなく、現在に近い時間を表現することが強く求められているのです。カレンダーなどのアプリケーションでも、何十年も先の日付を表現する必要はほとんどない。

しかし、この限られた時間内に問題がないわけではありません...。

2038年問題

ミレニアム・バグ(史上最悪のプログラミング・エラーの一つ)は、年を2桁で記憶するコンピューター・システムに影響を与えた。2000年になると、これらのシステムは、まるで1900年のように扱った。今回は、多くの人が事前に多くの時間と労力を費やして準備していたため、心配されたほどの大惨事には至りませんでした。

前項でお気づきの方は、Unixの時間に影響する同様の問題を発見されたのではないでしょうか。さて、Unix時代には、Y2K38問題という独自のデータ問題がありました。(これは通常、バグではなく問題と呼ばれます。2000年以降、私たちはより楽観的になったのかもしれません!)Unix時間が2038年に終了する場合、システムは新しい日付を1902年または1970年として扱います。あるいは、完全に失敗するかもしれません。

少なくとも、大晦日の真夜中にこの問題が発生することはないだろう。結局、2038年までにほとんどのシステムをアップグレードするか、その頃には時代遅れになっているのではないでしょうか。

タイムスタンプの有用なリソース

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

ダンのツールは、便利なWebアプリケーションの膨大なコレクションで、その中のひとつがタイムスタンプコンバータです。よりベーシックなものですが、デモがとてもきれいで、使い勝手がよいです。

時は、さらにミニマルな別の表情を見せる。Unix時間を含む様々なフォーマットで時刻を表示します。ページタイトルに現在時刻が含まれているので、便利です。

ユニックスタイムとコマンドラインツールの使用

LinuxおよびmacOSでは、日付/時刻(Unixタイムスタンプを含む)を扱うコアユーティリティとして、dateプログラムがあります。パラメータなしで呼び出すと、以下のように現在の日付/時刻を読みやすい形式で返す。

$ dateWed Feb 10 12:28:30 GMT 2021

Unix時間での現在の日付/時刻が必要な場合は、+%sパラメータを使用します。

$ date +%s1612960114

あなたのバージョンのdateが-dフラグをサポートしている場合、-dフラグを使用して、読みやすい日付をタイムスタンプに変換することができます。デフォルトでは、ほとんどのバージョンのLinuxでそうなっています。

$ date -d "Jan 2 1970" +%s82800

macOSでは、日付は別のプログラムであり、別のフラグを必要とします。

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

代わりに、-r フラグを使用すると、Unix タイムスタンプから変換することができます。

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

他のプログラムでは、Unixの時刻に%s形式を使うものもあります。例えば、Linux 版の ls で、ファイルの更新日時を Unix 時間で表示するには、次のようなコマンドを使用します。

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

プログラミング言語でのunix timeの使い方

PHP には time() 関数があり、これは現在の Unix タイムスタンプを返します。関数 date() は第2引数にタイムスタンプを取る。

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

JavaScriptは面白い方法で物事を処理します。Unixエポックからのミリ秒数を取得するための date:now() メソッドを備えています。もちろん、これを1000で割って、その結果を丸めれば、同等のUnix時間を秒単位で得ることができる:。

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

unixの時間を理解する

Unixの時間は、多くの場所で登場するシンプルな概念です。一度理解すれば、時差の計算など、とても便利に使えるかもしれません。また、特定のエラーの原因となっている可能性がある場合も特定することができます。

エポックやタイムスタンプなどの概念は、Linuxを使い始める上で重要な要素です。ls などの基本的な機能については、Linux の基本的なコマンドのガイドをご覧ください。

  • 2021-03-26 15:47 に公開
  • 閲覧 ( 31 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ