Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: xinyiman - Aprile 14, 2015, 03:19:41 pm

Titolo: Funzione per le date
Inserito da: xinyiman - Aprile 14, 2015, 03:19:41 pm
Come faccio a trasformare

"26-3-15 09:47:17"


in


"3-26-15 09:47:17"

Mi serve per una query. Solo che il db vuole il mese prima del giorno.
Grazie
Titolo: Re:Funzione per le date
Inserito da: nomorelogic - Aprile 14, 2015, 03:42:37 pm
immagino sia una condizione in una WHERE

Se è firebird puoi usare il formato iso:

WHERE  TABLE.CAMPODATA = '2015/03/26 10:45:13.0000'

così ti funziona a prescindere dalla localizzazione
Titolo: Re:Funzione per le date
Inserito da: xinyiman - Aprile 15, 2015, 08:53:52 am
Si è una condizione di una where, quello che però ho chiesto io è una funzione che mi cambia il formato della data all'interno della stringa.

Come posso trasformare agevolmente una una stringa

"26-3-15 09:47:17"


in


"3-26-15 09:47:17"
Titolo: Re:Funzione per le date
Inserito da: Legolas - Aprile 15, 2015, 09:31:47 am
Probabilmente c'è qualche funzione già bella e pronta(*), ma al momento non mi viene in mente niente di meglio che utilizzare ExtractStrings (http://www.freepascal.org/docs-html/rtl/classes/extractstrings.html) e ricombinare la stringlist che ne viene fuori nel modo che più ti aggrada :)

(*)EDIT: e infatti...
Puoi provare anche con l'accoppiata StrToDateTime (passando una stringa con formato attuale) e DateTimeToStr (passando il TDateTime ottenuto dalla funzione precedente e una stringa col formato che ti serve).
Titolo: Re:Funzione per le date
Inserito da: nomorelogic - Aprile 15, 2015, 10:21:17 am
Puoi provare anche con l'accoppiata StrToDateTime (passando una stringa con formato attuale) e DateTimeToStr (passando il TDateTime ottenuto dalla funzione precedente e una stringa col formato che ti serve).

+1

Devi provare con StrToDateTime e il parametro FormatSettings
Titolo: Re:Funzione per le date
Inserito da: Antonello - Aprile 16, 2015, 11:51:49 am
prova parametrizzare il codice sql e gli passi la data come parametro, dovrebbe fare la conversione automaticamente!
Titolo: Re:Funzione per le date
Inserito da: xinyiman - Aprile 16, 2015, 03:17:11 pm
Puoi provare anche con l'accoppiata StrToDateTime (passando una stringa con formato attuale) e DateTimeToStr (passando il TDateTime ottenuto dalla funzione precedente e una stringa col formato che ti serve).

+1

Devi provare con StrToDateTime e il parametro FormatSettings
Esempietto?!  ;D
Titolo: Re:Funzione per le date
Inserito da: xinyiman - Aprile 16, 2015, 03:18:07 pm
prova parametrizzare il codice sql e gli passi la data come parametro, dovrebbe fare la conversione automaticamente!
Non ho capito cosa vuoi dire, io passo già quel valore come parametro sottoforma di stringa. Mi fai un esempio di ciò che dici?
Titolo: Re:Funzione per le date
Inserito da: Legolas - Aprile 16, 2015, 05:43:41 pm
Codice: [Seleziona]
var
   fmt: TFormatSettings;
   dt: TDateTime;
   data1, data2: string;
begin
  fmt.ShortDateFormat:= 'd/m/yy';
  fmt.DateSeparator  := '-';
  fmt.LongTimeFormat := 'hh:nn:ss';
  fmt.TimeSeparator  := ':';

  data1 := '26-3-15 09:47:17';
  dt := StrToDateTime(data1,Fmt);
  fmt.ShortDateFormat := 'm/d/yy';
  data2 := DateTimeToStr(dt, fmt);
end;

Dovrebbe funzionare :)
Titolo: Re:Funzione per le date
Inserito da: Antonello - Aprile 16, 2015, 08:18:38 pm
prova parametrizzare il codice sql e gli passi la data come parametro, dovrebbe fare la conversione automaticamente!
Non ho capito cosa vuoi dire, io passo già quel valore come parametro sottoforma di stringa. Mi fai un esempio di ciò che dici?
mettiamo di avere un conponente qquery1
con il codice sql

select
  nome, cognome, dataoradinascita
from
  neonati
where
 datatoradinascita = :dtn

tquery1.parambyname('dtn').asstring := '26-3-15 09:47:17';
tquery1.open;

la conversione nel giuasto formato di data e ora *dovrebbe* essere automatico,
ripeto, *dovrebbe!*
Titolo: Re:Funzione per le date
Inserito da: Stilgar - Aprile 16, 2015, 10:23:17 pm
Codice: [Seleziona]
where
extract(day from campo_data) = {il tuo giorno}
and
 extract(month from campo_data) = {il tuo mese}
and
  extract(year from  campo_data)= {il tuo anno}

Altra opzione.

Ora affari tuoi decidere quella che ti piace di più :p

Stilgar
Titolo: Re:Funzione per le date
Inserito da: Antonello - Aprile 17, 2015, 09:14:47 am
e c'è anche questa

Edit1.Text := FormatDateTime('MM/DD/YYYY hh:nn:ss', Now);

e anche

http://lazarus-ccr.sourceforge.net/docs/rtl/dateutils/decodedatetime.html