Unix Bashコマンドラインでデフォルトのオペレーティングシステム(PerlやPythonなど)を使用して1125日前の日付を計算したいと思います。
実行中のシステムでGNU日付、次のようにすることができます。
ubuntu $ date --date="1125 days ago"
Wed Nov 7 15:12:33 PST 2007
GNU DateはFreeBSDやMacOSXシステムには付属しておらず、「X日前」などの値はサポートしていません。
freebsd81 $ date --date="+1125 days ago"
date: illegal option -- -
私できるMacまたはFreeBSDシステムで数日前の日付を計算します。ただし、数日間のみ該当します。
# Today is really Dec 6, 2010. 4 days ago it was:
macosx $ TZ=GMT+96 date +%Y%m%d
20101202
# But that doesn't work if I want to see the date 8 days ago:
macosx $ TZ=GMT+192 date +%Y%m%d
20101206
PerlやPythonなどのツールを使用せずに、GNU以外のシステムで以前の日付を計算できますか?または、より強力なスクリプト言語を使用する必要がありますか?
ベストアンサー1
さて、次のような巧妙な作業を行うことができます。
$ echo "`日付+%s` - (1125 * 24 * 60 *60)" |bc 1194478815 $日付-r 1194478689 2007年11月7日水曜日18:38:09 -0500
OpenBSD(確かに現在まではGNUベースではない)でテストされており、動作しているようです。
段階的に分析してみてください。
- 現在のunixtime(unix epochが開始されてからの秒数)を取得します。
$日付+%s 1291679934
- 1125日の秒数を求めてください。
$echo "1125*24*60*60" BC | 97200000
1つ減算 もう1つ (1291679934 - 97200000) = 1194478815
新しいUnixtimeを使用して良い日付を印刷してください(1194478815)。
$日付-r 1194478689 2007年11月7日水曜日18:38:09 -0500
あるいは、Solaris では次のようにして日付を印刷できます*:
/bin/echo "0t1194478815>Y\n<Y=Y" |adb
*参考資料http://www.sun.com/bigadmin/shellme/
また、Solarisのdateコマンドから現在のタイムスタンプを取得する別の方法は次のとおりです。
/usr/bin/truss /usr/bin/date2>&1 | nawk -F= '/^time()/ {gsub(/ /,"",$2);print $2}'
**参照:http://www.commandlinefu.com/commands/view/7647/unix-timestamp-solaris