日付フォーマット%Y%m%dで日付スタンプ文字列を一貫して操作します


5

基本的に接頭辞付きの日付スタンプであるログファイルを作成する必要があります yp_ そして接尾辞 .logそして、操作された日数:

$ touch yp_$(echo "$(date +%Y%m%d)-10" | /usr/bin/bc -l).log
$ ls
yp_20150912.log   # ... ok for today's date.

今日はそれで問題ありませんが、1日の数が1日から10日の間に含まれていると、すべての地獄が解放されます。結果は日付スタンプとして解釈できなくなります。

例えば。その日が2016年3月8日、つまり '20160308'であることを想像してください。 どのように私は10日を差し引くことが生成されることを確認するために上記のコードを書くのですか? ではない '20150298'だが '20150227'? また19820103と年の答えをテストしてください...

- 私は見た man date

- apropos date 私もレビューした161ヒットを吐き出す。

誰かがそのワンライナーを手伝ってくれる?


GNU date、興味のないですか?
bertieb

@bertieb:うん、GNU日付だ。私の最初の例はうるう年です!
Cbhihe

Welp、GNU date その後救助に:)
bertieb

回答:


6

日付を操作する必要があります(うるう年に注意を払いながら)

幸運なことに、 GNU date があります とても便利な -d オプション:

-d, --date=STRING
          display time described by STRING, not 'now'

(から man date

これは、 "今+ 1年"、 "1月28日+ 3週"など、任意の日付の説明を受け入れます。またはあなたの場合:「今 - 10日」:

touch yp_$(date -d 'now - 10 days' +%Y%m%d).log

の面倒な呼び出しは不要 bc、うるう年について心配しないで - GNU date それを処理します。


1
右に。これは まさに 私が念頭に置いていたことそして私はmanページでそのオプションを見ました、しかしその使用法を理解していませんでした。ありがとう - PS:ところで「雨と飲み物の土地」はたくさんの場所になる可能性があります。 :))
Cbhihe

それはあなたのために働いてくれてうれしいです - それは知っておくと非常に便利なことです(そして他の言語で利用できない場合は私が見逃した機能):) PS約55°N、そして意志;)
bertieb

6

今日からx日のフォーマットされた日付を表示するには、以下のようにします。

$ echo $(date +%Y%m%d)
20150922

$ echo $(date -d -10days +%Y%m%d)
20150912

$ echo $(date -d +10days +%Y%m%d)
20151002

2
私はあなたの答えの簡潔さが好きで、答えは死んでいます。しかしそれは@bertieb自身の後にやってきたもので、これも同じです。だから私はあなたにのみ投票することができます。 Tx Stevenとごめんなさい。
Cbhihe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.