次の形式で日付を出力するプログラムがあります。
Thu Mar 5 09:15:27 2015
これはLinuxの出力と非常によく似ていますdate
が、この形式にはタイムゾーンは含まれていません。 string Thu Mar 5 09:15:27 2015
asdate1
とstring Thu Mar 5 09:30:58 2015
as date2
inをキャプチャできると仮定するとbash
、計算を実行するために独自のbash/python/etc。スクリプトを作成せずにこれら2つの日付の間の秒数をどのように取得できますか?
答え1
「計算なし」はどういう意味なのかよく分からない。以下で計算してみてください...
date1="Thu Mar 5 09:15:27 2015"
date2="Thu Mar 5 09:30:58 2015"
printf "%s\n" $(( $(date -d "$date2" "+%s") - $(date -d "$date1" "+%s") ))
答え2
タイムゾーン情報がないと、常に正確な回答を提供することはできません。
#!/bin/bash
export TZ
for TZ in America/New_York Europe/Prague ; do
d1=$(date -d 'Mar 8 01:59:59 2015' +%s)
d2=$(date -d 'Mar 8 03:00:01 2015' +%s)
echo "$TZ: $((d2-d1))"
done
答え3
一部の他のシェルには組み込み機能があります。
扱いにくい
zmodload zsh/datetime
date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
for v (date{1,2}) strftime -rs $v '%a %b %d %T %Y' ${(P)v}
echo $((date2 - date1))
バラよりinfo zsh strftime
そしてinfo zsh flags
詳細については、P
パラメータ拡張フラグを参照してください。
クッシュ 93
date1='Thu Mar 5 09:15:27 2015'
date2='Thu Mar 5 09:30:58 2015'
echo "$(($(printf '%(%s)T - %(%s)T' "$date2" "$date1")))"
詳しくはman <(printf --nroff 2>&1)
ksh内をご覧ください。
(どちらの場合も、日付は現地時間帯とみなされます。)