2つの(非標準)日付形式の間で秒を見つける簡単な方法は何ですか?

2つの(非標準)日付形式の間で秒を見つける簡単な方法は何ですか?

次の形式で日付を出力するプログラムがあります。

Thu Mar 5 09:15:27 2015

これはLinuxの出力と非常によく似ていますdateが、この形式にはタイムゾーンは含まれていません。 string Thu Mar 5 09:15:27 2015asdate1とstring Thu Mar 5 09:30:58 2015as date2inをキャプチャできると仮定すると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内をご覧ください。

(どちらの場合も、日付は現地時間帯とみなされます。)

関連情報