2016-03-30 7 views
0

「dd/mm/YY H:M」と表示されているこの日付は、ある特定の期間を追加したいと思っています。 2日。bashで日付を書式設定する際にエラーが発生しました

私はこれらのコマンドを実行しようとすると、私は次のような結果しまった:私がしなければ順序は今日と月の間

date_time_start=`date -d "05/11/2015 23:45" +%d/%m/%Y" "%H:%M` 
echo $date_time_start 
11/05/2015 23:45 

反転された:

date_time_end=`date -d "$date_time_start 2 day" +%d/%m/%Y" "%H:%M` 
echo $date_time_end 
07/11/2015 23:45 

2日は正しく追加されており、注文はd/m/Yです!

私が逃していることを教えてください。

答えて

3

あなたの最初の観測は間違っています。日付が「05/11/2015」で、これを日付として入力すると、「mm/dd/YY」の形式で読み込まれます。 + "%d /%m /%Y"という形式は、日付ユーティリティの出力の形式なので、最初の出力は正しく表示されます。

しかし、2番目のステップでは、月と日は再び交換され、05は日として解釈されます。したがって、ダブルスワップエラーのため計算が正しいです。

+0

あなたの説明に感謝します。今それは明らかです! –

1

+ "& d /%m /%Y%H:%M"は、その形式の日付で読み込む形式を教えていますが、その形式で日付を出力します。そのフォーマットを使用してm/d/Y H:Mとして読み込まれます。 (また、スペースではなく、文字列全体を引用する)。この誤解により、すべての混乱が生じました。

+0

あなたは正しいです、今私は今解決策を見つける方法です。 –

1

誤った解釈を避けるために、入力が必要です。
テキストの日付は05/11/2015 23:45で、日付はm/d/Y(米国の日付書式)と解釈されます。

$ date -ud "05/11/2015 23:45" 
Mon May 11 23:45:00 UTC 2015 

05は(年の第五月)Mayとして、ない日としてdateによって読み込まれていることは明らかです。あなたは出力形式を設定するとき

すると、エラーが繰り返される:

$ date -d "05/11/2015 23:45" +%d/%m/%Y" "%H:%M 
11/05/2015 23:45 

と月は05(あなたは月11の望んでいないものを)として提示されます。

悲しいことに、米国中心の開発者が定義した形式で日付のいずれかを作成するよりも、他の解決策はありません。

$ date -ud "2015/11/05 23:45" 
Thu Nov 5 23:45:00 UTC 2015 
$ date -ud "11/05/2015 23:45" 
Thu Nov 5 23:45:00 UTC 2015 

や国際的に認められ道の逆のようなもので

いずれにしても、あなたの日付の文字列を変更する必要があります。

$ date -ud "2015/11/05 23:45 2days" +%d/%m/%Y" "%H:%M 
07/11/2015 23:45 
私はあなたが日付の問題を回避するために 2015/11/05を使用するように推奨して主張します

その後、次の2つの日を追加することができます。

$ date -ud "2015/11/05 23:45 2days" +%Y/%m/%d" "%H:%M 
2015/11/07 23:45 
+0

あなたの説明は明らかです、私は問題があります。私はUSAフォーマットを使用してあなたのsuggetionに従います –

関連する問題