日付を日/月/年として読むよう強制

日付を日/月/年として読むよう強制

「dd/mm/yyyy」形式の日付を解釈するためにGNUコマンドを取得する方法はdate次のとおりです。

私が得るもの:

$ date  -d '09/07/2016'
Wed, Sep  7, 2016 12:00:00 AM

私が望むもの:

$ date  -d '09/07/2016'
Sat, Jul  9, 2016 12:00:00 AM

LC_ALL私は成功せずにそれを設定しようとしました。

ベストアンサー1

date -dこれはGNU拡張であることに注意してください。予想される構文は固定されており、ロケールに依存しません。特に、はいいいえ使用POSIXgetdate()日付を解析します(GNUが使用するインタフェースdateも呼び出されましたが)。getdate()

一部のbusyboxバージョンの一部のビルドも-dオプションを認識しますが、より狭い範囲のフォーマットをサポートしています。特に。mm/dd/YYYY-D <strptime-format>

$ date -D %d/%m/%Y -d 01/10/2016
Sat Oct  1 00:00:00 BST 2016

アメリカの電話と全身会社(全開date、1995年からGNU-dスタイルのオプションもサポートしています。その人はPOSIXを使いますgetdate()。したがって、そのdate実装を使用すると、DATEMSK変数を使用して日付の解析方法を変更でき、1996年から次のものを使用できます。-pこれstrptimeコマンドラインに-styleを渡してフォーマットを解析します。

$ date --version
  version         date (AT&T Research) 2011-01-27
$ date -d 01/10/2016
Sun Jan 10 13:36:39 GMT 2016
$ date -d 01/10/2016 -p %d/%m/%Y
Sat Oct  1 13:36:51 BST 2016

AT&Tksh93もCompatibility APIをprintf %T使用しているため、この変数の影響を受ける可能性があります。したがって、ksh93では次のことができます。getdate()DATEMSK

$ DATEMSK=/dev/stdin <<< %d/%m/%Y printf '%T\n' 01/10/2016
Sat Oct  1 13:47:06 BST 2016

スクリプトの日付を移植可能に解析するには、組み込み関数(ロード後)とオプションをzsh使用できます。strftime-r

$ zmodload zsh/datetime
$ strftime -s REPLY -r '%d/%m/%Y' 09/07/2016
$ strftime %c $REPLY
Sat 09 Jul 2016 00:00:00 BST

zsh's はstrftime -rPOSIX を使用してstrptime()文字列を解析します。したがって、ロケールによって異なります。たとえば、フランス語のロケールでは、これを使用してstrftime -r %d-%b-%Y 14-juillet-2016フランス語の日付を解析できます。

一部のstrptime()実装(GNU実装など)では、英語ではなくロケールでまだ英語の月/日名を受け入れますが、すべてではありません(Solaris 11の実装では許可しません)。ユーザーのロケールで英語の日付を解析するときに念頭に置く必要があることがいくつかあります。

最新バージョンbashにもkshフレーバーがありますが、printf '%(format)T'時間解析機能はありません。

完全性のために、BSDではこれを使用して日付形式を再指定できますdate-f <strptime-format>-j

$ date -jf %d/%m/%Y 01/10/2016
Sat Oct  1 13:47:06 BST 2016

おすすめ記事