typememo.jp

zsh date unix time (epoch time) を自由自在に出力する

2020.12.10

#tech#zsh
Takeru Yamada

Contents


はじめに

どうも,たける@typememo です.

zsh date コマンドで UNIX 時刻 (エポック時刻) を出力する方法について説明します.

この記事の対象読者は,

  • zsh で時間の比較を行いたい人

です.

おそらく,このページに足を運んでくださった方のほとんどが,この zsh で時間の比較を行いたい人 だと思います.

足を運んでくださってありがとうございます!

では早速,unix 時刻の求め方を具体例付きで解説します.

参りましょう!

参考:


date unix time 記法

unix 時刻を出力するための文法は,

$ date -j -f "${INPUT_DATE_FORMAT}" "$(date "+${INPUT_DATE_FORMAT}")" "+%s"

です.

それぞれ,

  • "${INPUT_DATE_FORMAT}" は入力時刻フォーマット
  • "$(date "+${INPUT_DATE_FORMAT}")" はフォーマットする時刻そのもの
  • "+%s" で unix 時刻として出力すること

を意味しています.


-j オプションの意味

-j オプションを付与すると -f オプションが使えるようになります.

-j オプションを付与しないと -f オプションが機能しないので必ず付与してください.

$ man date
-j Do not try to set the date. This allows you to use the -f flag
in addition to the + option to convert one date format to
another.

-f オプションの意味

-f オプションは,

  • "${INPUT_DATE_FORMAT}"
  • "$(date "+${INPUT_DATE_FORMAT}")"
  • "+${OUTPUT_DATE_FORMAT}"

という3つの引数を与えてあげると機能します.

${INPUT_DATE_FORMAT} は入力時刻フォーマットです.

"$(date "+${INPUT_DATE_FORMAT}")" はフォーマットされる時刻そのものです.

"${OUTPUT_DATE_FORMAT}" は出力時刻フォーマットです.

今回は unix 時刻として出力したいので "${OUTPUT_DATE_FORMAT}" = "+%s" を代入しています.

筆者はこの -f オプションは --format という意味だと解釈しています.

$ man date
-f Use input_fmt as the format string to parse the new_date provided
rather than using the default [[[mm]dd]HH]MM[[cc]yy][.ss] format.
Parsing is done using strptime(3).

date unix time 記法の具体例

文法の型を理解したところで具体例を見て理解を深めましょう.

まずは,普通に時刻を表示しましょう.

$ date "+%Y-%m-%dT%H:%M:%S"
2020-12-09T22:28:54

zsh は "+%?" の形式で時刻を定義します.

詳しくは zsh date コマンドの使い方 をお読みください.

さて,この時刻の形式を unix 時刻に変換するには,どう書くか?

こう書きます.

$ date -j -f "%Y-%m-%dT%H:%M:%S" "$(date "+%Y-%m-%dT%H:%M:%S")" "+%s"
1607520595

はい,unix 時刻を出力することができました.

ポイントは,入力時刻フォーマットを "$(date)" の中でも使い回すことです.

実験してみればわかりますが,ほとんどの場合で,入力時刻フォーマットを使い回さないとエラーになります.

ところで,"$(date)" にはオプションを渡すこともできます.

なので1時間前の unix 時刻を出力するには,こう書けば良いです.

$ date -j -f "%Y-%m-%dT%H:%M:%S" "$(date -v-1H "+%Y-%m-%dT%H:%M:%S")" "+%s"
1607517891

あとはご自分でシェルを何度か叩けば自由自在に unix 時刻を出力できるようになります.

さぁ,鍛錬,鍛錬!


おわりに

zsh date コマンドの unix 時刻の求め方についての紹介でした.

いかがだったでしょうか?

面白かった,役に立った,と思っていただけたらシェアしていただけると嬉しいです.

余談ですが,この記事を描こうと思ったきっかけは,

zsh date unixtime

とかで検索してもそれっぽい記事が見つからなかったからです.

筆者は,検索しても見つからない情報こそ記事にする価値のある情報だと思います.

無いなら作ればいいのでは?

このモットーはいつまでも大切にしていきたいです.

最後までお読みいただきありがとうございました.

応援していただけるととても嬉しいです!


愛用品


関連記事

    なし