将来の日付を取得したい場合は、なぜ現在の日付を取得し、sed/awk/etcを使用できないのですか?

将来の日付を取得したい場合は、なぜ現在の日付を取得し、sed/awk/etcを使用できないのですか?

見たばかりこの問題最初の答えdate コマンドから直接将来の日付を取得する方法を示します。日付を増やすためにテキスト操作を使用できないのはなぜですか?オリジナル:

date | # increment the time string by some amount here

私は慣れていないか、awkよりsed良い例を挙げます。

編集する:それでは技術的な理由はまったくありませんか?ただ携帯性と見るよりも難しいという事実によるのでしょうか?

答え1

できますが、複雑になります。 1970年1月1日木曜日の深夜から経過した秒数など、単純な秒単位の日付がある場合(POSIX時間)、1分を追加するのは比較的簡単です。

$ date +%s
1379385111
$ date +%s | awk '{print "Current time is",$1,"soon will be", $1+60}'
Current time is 1379385275 soon will be 1379385335

大丈夫です。しかし、人間が読むことができる時間にしたい場合はどうすればよいですか? 4ヶ月2週間を追加したいですか?数秒以内に計算するのも痛く、そのような日付を解釈するのも簡単ではありません。たとえば、1を411174000表す日付は何ですか?

Sun 12 Dec 1936たとえば、3週間をどのように追加しますか?日付操作ライブラリが利用できない場合、これは驚くほど難しい問題になります。すべての日付を秒に変換して追加します。 2月とうるう年はもちろん、月は30日で、月は31日です。これは実際には小さな問題ではありません。これはまさにほとんどのプログラミング言語です持つ日付演算ライブラリ(真珠たとえば、または)。

さらに、または同じ日付をdate処理し、それを加算または減算し、数値文字列の代わりに人が読める日付を返すことができます。tomorrow Oct 18 2017

標準的な手順でこれを簡単に実行できますが、dateなぜ私たちは車輪を再発明しなければならないのですか?

1今日は1983年1月12日水曜日00:00:00 CETです。

答え2

時間と日付を操作するためによく設計されたライブラリ以外のものを使用するのは悪い考えです。マイナーな問題は、夏時間、うるう年、うるう秒、タイムゾーンなどの非常に複雑な問題にすばやく変更できます。

プログラマーたちは「あ、これには早い機能を1、2個だけすればいい」と絶えず考えるが、最近のイベントを振り返る必要もなく、アップル開発者たちもそう考えてイベントを正しく処理しなかった。夏時間への正しい変換

抜粋

夏時間(DST)は数時間前にアメリカで始まりました。つまり、時計は午前1時59分から午前3時まで速くなりました。

しかし、一部のiPhoneユーザーは夏時間の変更に関するさまざまな問題を報告しました。

TUAWレポート:

何人かの読者は昨夜、彼らのiPhoneの時計が予想通りに1時間前に進まず、代わりに自動タイムゾーン調整の問題のために間違った方向、つまり1時間後に動いたと報告しています。ナッシュビルのある読者の電話は、彼が山地標準時(Mountain Time)にいると考え、フロリダの読者の電話はシカゴの時間だと確信していました。私たちの同僚Mel Martinは、主に夏時間を守らないアリゾナ州に住んでいます。しかし、彼の電話(自動タイムゾーン設定と位置設定がオンになっている)が誤って1時間前になりました。

結論

問題が単純であるという事実に惑わされず、ライブラリを使用してください!

答え3

基本的には可能ですが、移植性が不足して失敗する可能性があり、最終的にはより多くの努力が必要になります。

awk分を3ずつ増やしたいとしましょう。 (59より大きい場合は無視して00にリセットする必要があります):

$ date
Mon Sep 16 22:52:42 AST 2013
$ date | awk -F: '{printf $1 ":" ; printf $2+3 ":" ; print $3}'
Mon Sep 16 22:55:43 AST 2013

そこが好きです。しかし、今は分が59に達するたびに00にリセットされる機能を開発する必要があります。もう良くありません。したがって、テキストを解析するよりも時間を増やす自然な方法が好まれます。

関連情報