「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 -r
POSIX を使用して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