• このエントリーをはてなブックマークに追加

【linux豆知識】unixtime活用方法

  • このエントリーをはてなブックマークに追加

unixtime
zaco muraです。

仕事でlinuxを扱うようになって数年ですが、最初の頃は耳慣れない言葉がたくさんありました。中でもunixtime(ユニックスタイム)という言葉は興味を持つ響きでした。実際自分が仕事で使うことはそんなに無いんですが、日付のデータを加工する場合に便利なのでメモしておきます

スポンサーリンク
Sponsords Link

unixtimeって?

unix系OSで使われる時間表現の一種です。特徴としては、1970年1月1日0時0分0秒を起点として1秒毎に加算される時間 ということです。わかりづらいですね。
つまり図で表すと以下のようになります。

一般的な時間 unixtime
1970年1月1日0時0分0秒 0
1970年1月1日0時0分59秒 59
1970年1月1日0時1分0秒 60
1970年1月1日1時0分0秒 3,600
1973年3月3日18時46分40秒 100,000,000(1億)
2001年9月9日10時46分40秒 1,000,000,000(10億)

何が便利なの?

unixtimeは一般的な時刻表現と違い、単純な数値の加算、減算だけで時刻を計算できることです。つまり、23:59の次は0:00に、31日の次は1日に、といったことを考慮しなくても良いということです。
これの何が便利かというと、時刻情報を使ったツールを作る時に実装をシンプルにできるのです。

使い方その1:一般的な時刻表示 -> unixtimeの変換

では、実際にunixtimeに変換してみましょう。個人的な好みでlinux(date)とawkを使ったパターンを書いてみます。

1.linuxの場合 : dateコマンドで+%s表示

# 現在時刻をunixtimeに変換
[zacomura@server ~]$ date +%s
1450150193

# 指定した時刻をunixtimeに変換
[zacomura@server ~]$ date -d "2001-09-09 10:46:40" +%s
1000000000

2.awkの場合 : strftimeコマンドで+%s表示

# 現在時刻をunixtimeに変換
[zacomura@server ~]$ awk 'BEGIN{print strftime("%s")}'
1450756693

# 指定した時刻をunixtimeに変換 (strftime単体では時刻表示を扱えないっぽいので、mktimeを使う)
$ awk 'BEGIN{print strftime("%s",mktime("2001 09 09 10 46 40"))}'
1000000000

使い方その2:unixtime -> 一般的な時刻表示の変換

今度は逆パターンです。

2.linuxの場合 : dateコマンドで -d オプションを使い、頭に @ を付ける

[zacomura@server ~]$ date -d "@1000000000" # @以降がunixtime表記
2001年  9月  9日 日曜日 10:46:40 JST

2.awkの場合 : strftimeの引数にunixtimeを代入

awk 'BEGIN{print strftime("%Y/%m/%d %H:%M:%S",1000000000)}'
2001/09/09 10:46:40

まとめ

ということで、unixtimeをlinux,awkで使う場合のメモでした。
そのうち実際にツールで使えるような使い方も記事にしたいと思います。

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link