Jawaban:
Dalam bash (> = 4.2) lebih baik menggunakan formatter tanggal bawaan printf (bagian dari bash) daripada eksternal date(biasanya tanggal GNU).
Dengan demikian:
# 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
Dalam 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')
Format tanggal lain yang tersedia dapat dilihat dari halaman manual tanggal (untuk perintah khusus non-bash eksternal):
man date
+%F %Tpintasan +%Y-%m-%d %H:%M:%S. Perhatikan bahwa beberapa filesystem (batuk ** HFS) akan mengonversikannya :menjadi /, memberikan Anda sebuah string 2016-09-15 11/05/00yang membingungkan.
date=$(date)bukan date=`date`. Juga, jangan gunakan huruf besar untuk variabel pribadi Anda; nama variabel huruf besar dicadangkan untuk sistem.
Mencoba: $(date +%F)
Anda sedang mencari format tanggal standar ISO 8601 , jadi jika Anda memiliki tanggal GNU (atau perintah tanggal yang lebih modern dari 1988) lakukan saja:$(date -I)
date -Itidak berfungsi. Setelah menginstal GNU coreutils menggunakan brew (yang menggunakan awalan 'g') gdate -Iberhasil.
-Iopsi yang didokumentasikan untuk GNU date, meskipun cukup yakin itu sepertinya setara dengan date +%F.
date -d '1 hour ago' '+%Y-%m-%d'
Outputnya adalah 2015-06-14.
%.
$(date +%F_%H-%M-%S)
dapat digunakan untuk menghapus titik dua (:) di antaranya
keluaran
2018-06-20_09-55-58
Dengan Bash terbaru (versi ≥ 4.2), Anda dapat menggunakan builtin printfdengan pengubah format %(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
printfjauh lebih cepat daripada datekarena itu adalah Bash builtin sedangkan dateperintah eksternal.
Selain itu, printf -v date ...lebih cepat daripada date=$(printf ...)karena tidak perlu forking subkulit.
datejika Anda sudah menggunakan ini dari dalam skrip bash, karena tidak harus memuat pustaka tambahan. (* Saya mengukur pada server linux saya perbedaan kecepatan ~ 160x lebih dari 1000 iterasi)
printf -v datetidak mencari subkulit. Info yang sangat bagus !!
#!/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
Di sini x adalah tanggal sampel yang digunakan & contoh kemudian menampilkan kedua format data serta mendapatkan tanggal 10 menit lebih dari tanggal saat ini.
Saya menggunakan formulasi berikut:
TODAY=`date -I`
echo $TODAY
Lihat halaman manual untuk date, ada sejumlah opsi berguna lainnya:
man date