コマンドラインから日付の形式を変更するにはどうすればよいですか?
-
07-07-2019 - |
質問
日付を1つの形式に変換する最も簡単な方法は何ですか、たとえば
2008-06-01
別の形式の日付へ、たとえば
2008年6月1日日
重要なのは実際には「太陽」です。なぜなら、曜日名によっては、非決定的な方法で他のものをいじる必要があるかもしれないからです。 GNU bash、バージョン3.2.17(1)-release(i386-apple-darwin9.0)を実行しています。
[背景:コマンドラインから実行する理由は、本当に必要なのはTextMateコマンドに書き込むことです...これは、textMateで常に実行しなければならない面倒なタスクです。 ]
解決
$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30
その他の形式オプションについては、 man date
を参照してください。
このオプションはLinuxで使用できますが、ダーウィンでは使用できません。ダーウィンでは、代わりに次の構文を使用できます。
date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F"
-f引数は入力形式を指定し、+引数は出力形式を指定します。
以下の別のポスターで指摘されているように、ローカライズの問題を回避するために、%aではなく%u(数値の曜日)を使用するのが賢明でしょう。
他のヒント
date(1)のマンページを読むと明らかになったはずです:
-j Do not try to set the date. This allows you to use the -f flag in addition to the + option to convert one date format to another.
そのsgmに感謝します。それで私はそれを参照するために戻ってきます-
date -j -f "%Y-%m-%d" "2008-01-03" +"%a%e %b %Y"
^ ^ ^
parse using | output using
this format | this format
|
date expressed in
parsing format
Thu 3 Jan 2008
ありがとう。
date -d yyyy-mm-dd
フォーマットをさらに制御したい場合は、次のように追加することもできます。
date -d yyyy-mm-dd +%a
あなたが望むと言う太陽の部分を取得するだけです。
date -d ...
使用法エラーが表示されるため、それをカットしていないようです:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
GNU bash、バージョン3.2.17(1)-release(i386-apple-darwin9.0)を実行しています。そして、人間が知る限り、date -dはただの
-d dst Set the kernel's value for daylight saving time. If dst is non-
zero, future calls to gettimeofday(2) will return a non-zero for
tz_dsttime.
曜日を取得するだけの場合は、文字列を一致させないでください。ロケールが変更されると壊れます。 %u
形式は、日番号を提供します:
$ date -j -f "%Y-%m-%d" "2008-01-03" +"%u"
4
そして実際、それは木曜日でした。その番号を使用して、プログラムにある配列にインデックスを付けるか、単に番号自体を使用します。
詳細については、日付およびstrftimeのマニュアルページを参照してください。 OS Xの日付のマンページは間違っていますが、これらの機能するオプションがリストされていないためです。