2016-11-23 6 views
9

、私はこのシェル日

date -d "2016-11-23 13:05 -1 hours " "+%Y-%m-%d %H:00:00" 

を印刷するとき、私は2016-11-23 23:00:00.奇妙を取得!

私はこの

date -d "2016-11-23 13:05 1 hours ago" "+%Y-%m-%d %H:00:00" 

を印刷するとき、私は2016-11-23 12:00:00を取得します。

なぜ異なるのですか?私は彼らが両方とも2016-11-23 12:00:00であると思います。

答えて

4

これは、負の数が13:05ではなく、タイムゾーンのオフセットとして扱われるためです。私のタイムゾーンでは、MET(GMTの一時間東)が、これは私が得るものです:

$ date -d "2016-11-23 13:05 -1 hours " "+%Y-%m-%d %H:00:00" 
2016-11-23 16:00:00 
$ TZ=GMT date -d "2016-11-23 13:05 -1 hours " "+%Y-%m-%d %H:00:00" 
2016-11-23 15:00:00 
$ TZ=GMT-1 date -d "2016-11-23 13:05 -1 hours " "+%Y-%m-%d %H:00:00" 
2016-11-23 16:00:00 
$ TZ=GMT-1 date -d "2016-11-23 13:05 -2 hours " "+%Y-%m-%d %H:00:00" 
2016-11-23 17:00:00 

Sun, 29 Feb 2004 16:21:42 -0800 

どうやら日付のように、通常は4桁の数字で指定されたタイムゾーンのオフセット、 (1)も-1に満足しています。 manページから

日付文字列

が--date = STRINGは、「日、2月29日午前16時21分42秒 2004として、主にフリーフォーマット人間が読める日付文字列であります「-0800」または「2004-02-29 16:21:42」、または「次の木曜日」までです。日付文字列は、 に、カレンダーの日付、時刻、時間帯、曜日、相対時刻 、相対日付、および番号を示す項目を含めることができます。空の文字列は、その日の始まりを示します。 日付文字列の形式は、ここでは簡単に文書化するよりも複雑ですが、詳細情報のドキュメントに記載されている です。

+0

ありがとうございます。これはまさに私が欲しいものです。 –