eyecatch thumbnail

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

Profile picture
ルッチ / Lucci
2020.12.10

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

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

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

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

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

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

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


愛用品


関連記事


大学生へのお知らせ

ここまで記事を読んでくれて本当に嬉しいです、ありがとうございます。

プログラミングを始めたばかりの頃って「やるぞ!」という気持ちは強めですが、 実際に取り組み始めると「何からどうやってどこまでやればいんだ?」 という感じで羅針盤を失うことが多いような気がします。(実体験)

そんな勉強熱心で向上心高めなんだけど目指す姿が曖昧な大学生の方に感謝の意も込めて、就職活動までサポートするプログラミングスクール「レバテックカレッジ」を紹介します。↓

Levtech-college

「自走力」のあるエンジニアを最短3ヶ月で目指せるカリキュラムが月額30,000円で用意されていて、 現段階の「目指す姿が曖昧で何から手をつければいいかわからない状態」から脱却できます。

自分は実際にIT企業で働いていますが、「自走力」のあるエンジニアの方にはいつも助けられています。

なので、目指す姿が曖昧な人はとりあえずレバテックカレッジが導いてくれる 「自走力のあるエンジニア」を目指してみるのはスタートダッシュとしてはアリです。

レベルアップしてからジョブチェンするのはRPGでも常套手段ですし、 レバテックカレッジで一通りのスキルを習得してから自分の目指す姿を再定義するといいかもです。

「自走力のあるエンジニア」って実際どんなエンジニアなの? 何から手をつければいいかわからないから教えて欲しい、 という人は上のテキストリンク/画像リンクから「無料相談会」への申し込みをお願いします。

よきエンジニアライフを!