Girişin bugüne kadarki biçimini nasıl belirlersiniz?


19

Tarafından tanınmayan bir biçimde bir tarih ve saat verildiğinde, tarih ve saati datenasıl datetanıyabilirim?

Örneğin:

$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

Var mı --magic-option? Değilse sed, girdiyi iyi biçimlendirilmiş bir tarih dizesine dönüştürmek yerine bunu çözmek için daha zarif bir yol var mı?


Yanıtlar:


10

Ne POSIX ne de GNU tarihi yoktur --magic-option. FreeBSD bunu çağırır -f( dateteklif ettiğiniz biçime değil, çıktı biçimi belirteçlerine benzer bir sözdizimi ile ).

Tarihiniz GNU tarihiyle tanınmaya çok yakın: tek yapmanız gereken, tarihi saatten ayıran iki nokta üst üste işaretini değiştirmek.

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

1
ve özel biçimlerle? Tek yol düzenli ifadeler midir? Bu korkunç :-(
phil294

1
Klasik örnek olan, içinde bulundukları format hakkında bir şey bilmeden tarihleri ​​ayrıştıramazsınız 01/02/03.
Gilles 'SO- kötü olmayı bırak'

5

Tarihler ve saatler ile daha senaryo dostu bir şekilde ilgilenen bir sürü araç ( dateutils ) yazdım . Sihirli seçeneğiniz var --input-format|-i, örneğin:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

İken dconvdoğrudan desteklemez date(değil kazandırır yapar 'ın çıkış biçimi TZveya çevrede herhangi bir şey), bir araç vardır strptimeiçinde dateutils bünyesinde barındırmakta %ZBiçim belirteci.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.