Saya ingin memvalidasi format tanggal di bawah ini dalam skrip shell
2015-Jul-13
Saya menggunakan date -d "2015-Jul-13" +"%Y-%b-%d"
tetapi memberikan kesalahan sebagai
date: invalid date '2015-Jul-13'
shell-script
date
chhaya vishwakarma
sumber
sumber
date
tidak mengenaliYYYY-MMM-DD
. Bisakah Anda menggunakanYYYY-MM-DD
atauDD MMM YYYY
sebagai gantinya?at
, dan - saya pikir -touch
juga. Saya menulis funvtion shell validasi tanggal berdasarkantouch
sekali ... tidak, tidaktouch
- itu hanya menangani angka, tetapiat
melakukan beberapa penguraian yang cukup dalam ...Jawaban:
GNU
date
tidak mendukungYYYY-MMM-DD
. Namun, ia mengertiDD-MMM-YYYY
. Jadi jika Anda benar-benar harus menangani tanggal format ini, Anda dapat melakukannya dengan sesuatu seperti ini, yang hanya menukar argumen sekitar ke format yangdate
mengharapkan:Inilah solusi lengkapnya. Memecahnya,
IFS=-
instruksi memberitahu shell untuk membagi baris perintah yang akan datang dengan tanda hubung-
bukan spasi. Theset $ymd
mengurai$ymd
variabel seperti untuk baris perintah, tapi sekarang membagi oleh tanda hubung, menetapkan nilai untuk parameter$1
,$2
et seq . Secaraecho "$3-$2-$1"
sepele mengeluarkan tiga nilai yang ditangkap dalam urutan terbalik.sumber
ymd=$(IFS=-;set $ymd; echo "$3-$2-$1")
Bisakah Anda mengungkapkan keajaiban di balikset
perintah?Dari manual: -
Tapi sepertinya
YYYY-MMM-DD
formatnya tidak dikenali . Jadi, Anda dapat menggunakan dari bawah atau sejenisnya seperti:ATAU Anda harus mengonversi / memformat ulang sebelum mengirim ke
date
!Lihat juga Bagaimana Anda menentukan format untuk input hingga saat ini?
Saya sarankan untuk Mengunjungi: Format input tanggal .
ditekankan oleh saya
Di sini Anda dapat melihat bahwa tidak ada format seperti tahun-bulan-hari ! (berbulan-bulan ditulis secara harfiah)
sumber
Dengan
zsh
Anda dapat menggunakanstrftime
builtin (tersedia viazsh/datetime
) dengan-r
(terbalik):yang menggunakan format untuk mengurai timestring dan menampilkan jumlah detik sejak zaman:
Kesalahan ini keluar jika tanggal tidak valid:
Anda juga dapat mengonversi detik sejak zaman ke format standar / tanggal kustom lainnya, mis
sumber