Bash日付の算術演算... ¿その逆ですか?

Bash日付の算術演算... ¿その逆ですか?

編集:Amazon Linuxを使用する:

Linux ip-xx-xx-xx-xxx 3.14.44-32.39.amzn1.x86_64 #1 SMP Thu 6月11日 20:33:38 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux


このコマンドの出力は次のとおりです。

date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22"

2015-07-27 00:11:22

このコマンドの出力は次のとおりです。

date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 + 00:05"

2015-07-27 00:06:22

このコマンドの出力は次のとおりです。

date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 - 00:05"

2015-07-27 00:16:22

マッソサ、私たちの時間を元に戻したのだろうか?それとも8階に問題があるのでしょうか?

編集する:私のAmazon Linuxの時間はUTC+00:00で、Ubuntuローカルシステムの時間はUTC-05:00です。 Ubuntuの同じコマンドは次のようになります。

2015-07-26 19:11:22

2015-07-26 19:06:22

2015-07-26 19:16:22

それぞれ+ 00:05タイムゾーンではないようです。

ベストアンサー1

消息筋によるとgnulibの解析-datetime.y、機能関連機能のようですタイムゾーン_hhmm

まず、次の形式を使用して秒を追加することはできません。date +"%Y-%m-%d %H:%M:%S" --date="2015-07-27 00:11:22 - 00:05:01"解析エラーが発生します。

date: invalid date ‘2015-07-27 00:11:22 - 00:05:01’

次に、time_zone_hhmm関数のヘッダーに従って:

/* Convert a time zone expressed as HH:MM into an integer count of
minutes.  If MM is negative, then S is of the form HHMM and needs
to be picked apart; otherwise, S is of the form HH.  As specified in
http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow
only valid TZ range, and consider first two digits as hours, if no
minutes specified.  */

したがって、時間を逆順に追加/削除する動作に一致する時間帯を変更するようです。

時間通りに算術を実行するには、計算を簡単に実行できるEpochタイムスタンプ(日付+ '%s')を使用することをお勧めします。また、これはUTC時間に基づいており、使用しているサーバーのローカルタイムゾーンを考慮しません。

したがって、タイムスタンプは米国、アジア、またはヨーロッパで同じ結果を返します。次に、このタイムスタンプを使用して、時間帯を考慮して人が読める時間を表示します。

とにかくよく捕まった。この素晴らしいヒントがなければ、私は決してgnulibソースコードを掘り下げなかったでしょう!

おすすめ記事