解決策 1:
ring0 に数秒差をつけられましたが、完全なコマンドは次のとおりです:
echo $(($(date --utc --date "$1" +%s)/86400))
これはUTC時間で進みます。結果:
[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
WolframAlpha で簡単に確認すると、これが正しい値であることがわかります。
解決策 2:
これが最も簡単な方法だと思います:
expr $(date +%s) / 86400
解決策 3:
date
コマンドは 1970-01-01 00:00:00 UTC
からの秒数を表示できます .
date +"%s"
結果を 3600*24
で割ることができます 日数 (UTC) を取得します。
例えば。バッシュで
x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))
日数を表示します。
解決策 4:
これも解決する必要がありましたが、時間帯に関係なく day# に同じ値を取得したかったのです。ここに示すようなアプローチでは、値は現地時間の午前 0 時ではなく UTC の午前 0 時に変更されます。これはおそらく、EU や米国東海岸ではあまり問題にならないように思われます。これらの地域は UTC に十分近いため、通常の就業日の途中で日の値が変化することはありませんが、たとえばカリフォルニアでは、日の変化は4pm PST に発生するため、不便な場合があります。オーストラリア人は、朝遅くに日の値が変わることに特にイライラするだろうと思います.
それを修正したい場合は、秒/日で割る前に UTC からのオフセットを追加する必要があります。幸いなことに、Linux の date コマンドには %z UTC からのオフセットを報告するフォーマット シーケンス。標準形式 (この結果はデンバー時間、MDT のものです):
$ date +%z
-0600
. . .計算で直接使用することはできません。適切な修飾子を使用すると、必要な結果が得られます:
$ date +%-:::z
-6
それを通常の秒/時間/日の変換と一緒にすると、次のように 1970 年 1 月 1 日からの日数が出力され、1970 年 1 月 1 日自体がゼロ日であり、値は現地時間の午前 0 時に増加するはずです。 /P>
echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))
date +%-:::z
によって "+5:30" が生成されるため、この単純な計算は、UTC から 1 時間オフセットされていないタイム ゾーン (インド、TZ=Asia/Kolkata など) では機能しません。 上記のステートメントで使用すると、「式に無効な文字」エラーが発生します。