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 %T
pintasan +%Y-%m-%d %H:%M:%S
. Perhatikan bahwa beberapa filesystem (batuk ** HFS) akan mengonversikannya :
menjadi /
, memberikan Anda sebuah string 2016-09-15 11/05/00
yang 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 -I
tidak berfungsi. Setelah menginstal GNU coreutils menggunakan brew (yang menggunakan awalan 'g') gdate -I
berhasil.
-I
opsi 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 printf
dengan 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
printf
jauh lebih cepat daripada date
karena itu adalah Bash builtin sedangkan date
perintah eksternal.
Selain itu, printf -v date ...
lebih cepat daripada date=$(printf ...)
karena tidak perlu forking subkulit.
date
jika 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 date
tidak 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