関数の日付書式を指定する方法

関数の日付書式を指定する方法

私はコマンドdate -d "20170712"が日付を確認して文字列として返すことを理解していますWed Jul 12 00:00:00 PDT 2017

私の質問は次のとおりです

  1. 日付は私が提供した文字列の形式をどのように理解できますか?(この場合、年は2107、月は7月、日は12です)

  2. また、「20171307」を渡し、日付が13日で月が7月であることを関数に知りたい場合はどうすればよいですか?

  3. dateコマンドに渡される文字列をフォーマットする方法はありますか?

ベストアンサー1

GNUはdate入力内容を解析するために最善を尽くしますが、いくつかの形式は本質的にあいまいです。

BSDはdate入力フォーマットを指定することを許可(または実際に要求)し、その-fフォーマットに従って入力を解析し、入力がフォーマットと一致しない場合にエラーを発生させます。

それにもかかわらず、あなたのような非論理的でランダムな日付形式をサポートするために標準ツールを期待または要求するのは間違っているようです。標準ツールは標準形式をサポートする必要があり、長期的に見ると、スクリプトとプログラムが内部的にコンピュータフレンドリーな形式を使用するのが合理的であることがわかります。奇妙な行動をしている人間と対話するには、単純なシェルラッパー関数を作成するのは簡単です。

Wackydate () {
    local day  # local is a Bashism
    local mon
    local year
    year=${1%????}
    mon=${1#$year??}
    day=${1#$year}
    day=${day%$mon}
    shift
    date -d "$year$mon$day" "$@"
}

シェルの引数は、それぞれ先頭または末尾から削除されたワイルドカード文字に一致する値を置き換えて${variable#prefix}返します。${variable%suffix}variable#%

おすすめ記事