GNU以外のシステムで1125日前の日付を計算しますか?

GNU以外のシステムで1125日前の日付を計算しますか?

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

おすすめ記事