1299

$(date)bashシェルスクリプトで使用してみましたが、日付のYYYY-MM-DD形式が必要です。
どうすればこれを入手できますか?

4

14 に答える 14

2054

datebash(> = 4.2)では、外部(通常はGNUの日付)ではなく、printfの組み込みの日付フォーマッター(bashの一部)を使用することをお勧めします。

そのような:

# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1 

# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1 

# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal

bash(<4.2):

# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')

# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')

# print current date directly
echo $(date '+%Y-%m-%d')

その他の利用可能な日付形式は、日付のマニュアルページから表示できます(外部の非bash固有のコマンドの場合)。

man date
于 2009-09-09T19:08:57.030 に答える
429

試す:$(date +%F)

%Fオプションはのエイリアスです%Y-%m-%d

于 2009-09-09T19:11:01.333 に答える
117

あなたはこのようなことをすることができます:

$ date +'%Y-%m-%d'
于 2009-09-09T19:08:32.577 に答える
54

ISO 8601標準の日付形式を探しているので、GNU日付(または1988よりも新しい日付コマンド)を使用している場合は、次のようにしてください。$(date -I)

于 2013-06-19T15:49:39.003 に答える
47
$(date +%F)

出力

2018-06-20

または、時間も必要な場合:

$(date +%F_%H-%M-%S)

間にあるコロン(:)を削除するために使用できます

出力

2018-06-20_09-55-58
于 2018-06-20T07:14:21.070 に答える
23
date -d '1 hour ago' '+%Y-%m-%d'

出力はになります2015-06-14

于 2015-09-07T08:05:22.727 に答える
21

最近のBash(バージョン≥4.2)では、組み込みprintfのフォーマット修飾子を使用でき%(strftime_format)Tます。

$ printf '%(%Y-%m-%d)T\n' -1  # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1  # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1  # Capture as var $date

printfdateはBashビルトインでdateあり、外部コマンドであるため、よりもはるかに高速です。

同様に、サブシェルをフォークする必要がないため、printf -v date ...より高速です。date=$(printf ...)

于 2017-11-10T05:15:22.633 に答える
14

私は次の定式化を使用します:

TODAY=`date -I`
echo $TODAY

のマニュアルページを確認してくださいdate。他にも便利なオプションがいくつかあります。

man date
于 2019-07-17T08:31:12.773 に答える
9

2017ではなく17などの2つの数値形式で年が必要な場合は、次のようにします。

DATE=`date +%d-%m-%y`
于 2017-06-02T18:55:05.307 に答える
7

私がこのようなタスクを持っているときはいつでも、私はにフォールバックすることになります

$ man strftime

時間フォーマットオプションのすべての可能性を思い出してください。

于 2018-05-08T21:25:57.323 に答える
7

私は時間と時間で$(date +"%Y-%m-%d") またはを使用します。$(date +"%Y-%m-%d %T")

于 2019-01-28T17:18:01.483 に答える
7

次のコマンドを使用してみてください:

date | cut -d " " -f2-4 | tr " " "-" 

出力は次のようになります。21-Feb-2021

于 2021-02-21T15:12:35.727 に答える
5
#!/bin/bash -e

x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"

echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c

ここで、xは使用されたサンプルの日付であり、例では、データのフォーマットと、現在の日付より10分長い日付の取得の両方が表示されます。

于 2018-01-18T11:46:31.383 に答える
0

日付を環境変数として設定でき、後で使用できます

setenv DATE `date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"

また

DATE =`date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"
于 2018-12-26T08:38:23.140 に答える