Come si specifica un formato per l'input fino ad oggi?


19

Data una data e un'ora in un formato non riconosciuto da date, come posso datericonoscere la data e l'ora?

Per esempio:

$ 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

Esiste --magic-option? In caso contrario, esiste un modo più elegante per risolverlo piuttosto che utilizzare sedper trasformare l'input in una stringa di date ben formata?


Risposte:


10

Né POSIX né la data GNU hanno --magic-option. FreeBSD lo chiama -f(con una sintassi simile agli dateidentificatori del formato di output, non quello che proponi).

La tua data è molto vicina all'essere riconosciuta dalla data GNU: basta sostituire i due punti che separano la data dal tempo con uno spazio.

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

1
e con formati personalizzati? L'unica strada da percorrere sono le espressioni regolari? questo è orribile :-(
phil294

1
Non puoi analizzare le date senza sapere qualcosa sul formato in cui si trovano, l'esempio classico è 01/02/03.
Gilles 'SO- smetti di essere malvagio' il

5

Ho scritto un sacco di strumenti ( dateutils ) che gestiscono le date e gli orari in un modo più intuitivo . La tua opzione magica esiste --input-format|-i, ad esempio:

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

Anche dconvse non supporta direttamente dateil formato di output (non conferisce TZo nulla nell'ambiente), c'è uno strumento strptimein dateutils che supporta l' identificatore di%Z formato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.