PDA

Visualizza la versione completa : [perl] Conversione date


Giorgetta
20-12-2005, 18:49
Ciao a tutti!
Ho provato a leggere qua e lÓ sul forum se c'era la riposta alla mia domanda, ma non l'ho trovata....
La domanda Ŕ la seguente:
tramite questo codice

$date_conv = localtime($date)

sono riuscita a convertire la data contenuta nel campo di una tabella dal formato "12597651" al formato "Tue Sep 13 10:57:42 2005",
per˛ quello che mi serve Ŕ convertirla nel formato "13/09/2005 10:57:42" : qualcuno saprebbe aiutarmi?

Grazie!

MARTEDI
21-12-2005, 09:53
Puoi fare cosý:

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isd st)=localtime(time);

$year=$year+1900;
$mon++;
if ($mon<10)
{$mon="0$mon"}
if ($hour<10)
{$hour="0$hour"}
if ($min<10)
{$min="0$min"}


$data="$mday/$mon/$year $hour:$min:$sec";

Giorgetta
21-12-2005, 10:35
Perfetto!!!
Grazie mille!!! :)

lupo987
16-09-2010, 18:17
Vista la pertinenza di questo threa io avrei circa la stessa esigenza per la precisione avrei la necessitÓ di farmi restituire un mese indietro.
Potete aiutarmi.
:dh˛: :dh˛:

Mich_
20-09-2010, 09:21
Per "mese intero" intendi un mese scritto in lettere per intero?

Il Perl non ha in se la conoscenza dei nomi dei mesi.
Con la tecnica proposta da MARTEDI (prima riga) ricavi i numeeri corrispondenti.
Come vedi il mese e` un numero compreso tra 0 (corrisp. a gennaio) e 11 (dicembre).
Quindi devi fornire tu un vettore contenente i nomi dei mesi ed estrarre il mese che ti interessa:

my @nomimesi = ("gennaio", "febbraio", ...);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isd st) = localtime(time);
my $mesecorrente = $nomimesi($mon);

lupo987
20-09-2010, 11:24
Ciao Mich_
in realtÓ avrei la necessitÓ di calcolare un mese indietro in formato numerico.
Per esatezza localtime torna 08 oggi che Ŕ settembre a questo valore ritornato da localtime devo calcolare -1 per poter ottenere il mese corretto;tutto questo in funzione del fatto che i nomi file che intendo spostare con questo script portano la data nel nome file.
Ciao Thanks

Mich_
20-09-2010, 12:24
Originariamente inviato da lupo987
Ciao Mich_
in realtÓ avrei la necessitÓ di calcolare un mese indietro in formato numerico.
Per esatezza localtime torna 08 oggi che Ŕ settembre a questo valore ritornato da localtime devo calcolare -1 per poter ottenere il mese corretto;tutto questo in funzione del fatto che i nomi file che intendo spostare con questo script portano la data nel nome file.
Ciao Thanks
Non ho capito.

>> localtime torna 08 oggi che Ŕ settembre
E` corretto. In Perl il numero dei mesi inzia da 0 (infatti occorre aggiungere 1 per avere il valore che usiamo comunemente)

Fa' un esempio di data che hai e dell'output che ti interessa.
E verifica che sia sempre scritta in modo coerente (sempre in italiano /oppure inglese, sempre con tre lettere/per esteso, senza erorri di ortografia, ...)

Tieni presente che localtime/gmtime si puo` usare in due modi (anche se dal punto di vista del programmatore e` psempre la stessa) cambiando l'argomento su cui agisce la funzione stessa:
- per ricavare la data/ora odierna (inserendo la funzione time)
- per ricavare una data diversa (inserendo la data in un formato particolare)


PS. ora rileggendo bene la tua richeista inizale, vedo che avevo interpretato male una parola (e magari generato confusione inutile)

lupo987
20-09-2010, 12:37
Allora io ho un output di questo genere
201009 (ma questo solo perchŔ alla variabile mese aggiungo +1).
Il mio nome file da archiviare hanno questa info NAME_XXX_20090811.xml
lo script che devo fare parte in crontab da una macchina HP-UX e dalla directory devo andare a prendere i soli file con nome NAME_XXX_200908
Dove 08 Ŕ il mese di Agosto come potrei a questo appunto gestire tale problema il print se sottrago -1 viene fuori 8 e non 08.
Ciao

Mich_
20-09-2010, 13:02
Ancora non riesco a capire esattamente.

Provo a riassumere quanto ho capito:
- Tu hai in un database (o una dir contenente file di database?) una serie di nomi del tipo NAME_XXX_20090811.xml dove le cifre rappresentano AAAAMMGG di una data
- Vuoi estrarre tutti i file/nomi in cui la stringa corrisponde al mese corrente (anche anno, oppure tutti i mesi uguali in tutti gli anni passati?)

Inizio a scrivere il procedimento Perl.
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isd st) = localtime(time);
my $meseoggi = sprintf "%02d", ($mon+1); # converte in stringa di due cifre
my $annooggi = sprintf "%04d", ($year+1900); # se serve anche anno
... inizio loop {
legge il prossimo elemento da verificare
qui la RE per verificare se il le stringhe coincidono
se coincidono ...
se non coincidono, prosegui il loop
}

lupo987
22-09-2010, 09:52
Ottimo grazie del tuo aiuto ho risolto con questo poco di codice che hai postato.
:unz:

Loading