Saya mencoba menggunakan $(date)
skrip bash shell saya, namun, saya ingin tanggal dalam YYYY-MM-DD
format.
Bagaimana saya mendapatkan ini?
1112
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 string2016-09-15 11/05/00
yang membingungkan.date=$(date)
bukandate=`date`
. Juga, jangan gunakan huruf besar untuk variabel pribadi Anda; nama variabel huruf besar dicadangkan untuk sistem.Mencoba:
$(date +%F)
sumber
Anda dapat melakukan sesuatu seperti ini:
sumber
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)
sumber
date -I
tidak berfungsi. Setelah menginstal GNU coreutils menggunakan brew (yang menggunakan awalan 'g')gdate -I
berhasil.-I
opsi yang didokumentasikan untuk GNUdate
, meskipun cukup yakin itu sepertinya setara dengandate +%F
.Outputnya adalah
2015-06-14
.sumber
%
.dapat digunakan untuk menghapus titik dua (:) di antaranya
keluaran
sumber
Dengan Bash terbaru (versi ≥ 4.2), Anda dapat menggunakan builtin
printf
dengan pengubah format%(strftime_format)T
:printf
jauh lebih cepat daripadadate
karena itu adalah Bash builtin sedangkandate
perintah eksternal.Selain itu,
printf -v date ...
lebih cepat daripadadate=$(printf ...)
karena tidak perlu forking subkulit.sumber
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 !!Setiap kali saya memiliki tugas seperti ini saya akhirnya jatuh kembali ke
untuk mengingatkan diri sendiri tentang semua kemungkinan.
sumber
Jika Anda ingin tahun dalam format dua angka seperti 17 daripada 2017, lakukan hal berikut:
sumber
Di sini x adalah tanggal sampel yang digunakan & contoh kemudian menampilkan kedua format data serta mendapatkan tanggal 10 menit lebih dari tanggal saat ini.
sumber
Saya menggunakan formulasi berikut:
Lihat halaman manual untuk
date
, ada sejumlah opsi berguna lainnya:sumber
Saya menggunakan
$(date +"%Y-%m-%d")
atau$(date +"%Y-%m-%d %T")
dengan waktu dan jam.sumber
Anda dapat mengatur tanggal sebagai variabel lingkungan dan nantinya Anda dapat menggunakannya
atau
sumber