カテゴリー
【Linuxコマンド入門】Alpine Linux標準のdateコマンドを使う際のちょっとしたコツ
※ 当ページには【広告/PR】を含む場合があります。
2020/12/28
2021/12/29
Alpine Linux (BusyBox) のdateコマンドについて
$ date -d "2019/07/01 12:00:00"
date: invalid date '2019/07/01 12:00:00'
$ date --version
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.
...
Recognized TIME formats:
hh:mm[:ss]
[YYYY.]MM.DD-hh:mm[:ss]
YYYY-MM-DD hh:mm[:ss]
[[[[[YY]YY]MM]DD]hh]mm[.ss]
'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead
$ date -d "2018-03-13"
Tue Mar 13 00:00:00 UTC 2018
$ date -d "2018-03-13" "+%Y年%m月%d日"
2018年03月13日
dateコマンド活用事例① 〜 sedコマンドを使わない文字列の置換
date
${****//<置換前文字>/<置換後文字>}
#!/bin/bash
that_date="2018/03/13"
dt=$(date -d ${that_date//\//-} "+%Y年%m月%d日")
echo $dt
that_date.sh
$ chmod +x that_date.sh
$ ./that_date.sh
2018年03月13日
sed
#!/bin/bash
that_date="2018/03/13"
dt=$(echo "$that_date" | sed -e 's~/~-~g' | xargs date "+%Y年%m月%d日" -d)
echo $dt
sed
dateコマンド活用事例② 〜 GNU系dateコマンドでも使えるエポック時間に変換するテクニック
#!/bin/bash
that_date="2018/03/13"
#出力の単位は秒
epoch_dt=$(date -u -d "${that_date//\//-} 00:00:00" +"%s")
#時刻の部分が00:00:00の場合には以下のように省略可
epoch_dt=$(date -u -d "${that_date//\//-}" +%s)
echo $epoch_dt
that_date.sh
$ chmod +x that_date.sh
$ ./that_date.sh
1520899200
dateコマンド活用事例③ 〜 awkコマンドの中でdateを使うテクニック
...,2018/03/13,...
1,3.14,2018-03-30,taco
$ echo '1,3.14,2018-03-30,taco' | awk -F"," '
function _parse_epochtime(rawtime) {
#👇文字をdateで使えるフォーマットに直す
gsub("/", "-", rawtime);
#👇Awk内部で外部のコマンドを利用できる
cmd="date -u --date=\""rawtime" 00:00:00\" +\"%s\"";
cmd | getline parsed_time
close(cmd)
#👆getlineで呼び出した外部コマンドは自動では閉じないので
#明示にclose関数で閉じる
return parsed_time;
}
BEGIN{
OFS = ",";
}
{
epochtime = _parse_epochtime($3);
print $1,$2,epochtime,$4
}
'
#👇出力
1,3.14,1522368000,taco
""
getline
|
close
dateコマンド活用事例④ 〜 dateコマンドで当年の一月一日からの今日までの日数が知りたい
#👇date -u +%sが今日の日付
$ echo $(( ($(date -u +%s) - $(date -u -d "2021-01-01" +%s))/86400 ))
231
#もしくはexpr
$ expr \( $(date -u +%s) - $(date -u -d "2021-01-01" +%s) \) \/ 86400
231
echo $((***))
expr
bc -l
$ echo "($(date -u +%s) - $(date -u -d "2021-01-01" +%s))/86400" | bc -l
231.09310185185185185185
#👇年消化率
$ echo "($(date -u +%s) - $(date -u -d "2021-01-01" +%s))/86400/365" | bc -l
.64193380272633744855
dateコマンド活用事例⑤ 〜 dateコマンドで1日前の1時間前の11分前を考える
N日前
N時間先
--dateオプション(-dオプション)
$ date --version
date (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
#👇1日前
$ date --date "-1day"
2021年 12月 28日 火曜日 15:23:04 JST
#👇7時間先
$ date -d "+7hour"
2021年 12月 29日 水曜日 22:24:19 JST
$ date --date "-1day"
date: invalid date '-1day'
+1day
date +%s
$((評価式))
date "@<換算後のエポック秒>"
#👇1日前
$ date -d "@$(($(date +%s) - 60*60*24))"
Tue Dec 28 07:36:58 UTC 2021
#👇7時間先
$ date -d "@$(($(date +%s) + 60*60*7))"
Wed Dec 29 14:41:45 UTC 2021
#👇1日前の1時間前の11分前
$ date -d "@$(($(date +%s) - 60*60*24 - 60*60*1 - 60*11))"
Tue Dec 28 06:37:37 UTC 2021
参考にしたサイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー