Data e hora com fuso Horário

Delphi

03/04/2013

Bom dia.

Estou precisando preencher uma propriedade com a data, hora e fuso horário conforme o exemplo a baixo.
Ex: 2013-04-01T13:14:12-03:00

Estou utilizando Delphi 7. Será que alguém tem alguma idéia para ajudar?

Obrigado.
Ureis

Ureis

Curtidas 0

Melhor post

Ureis

Ureis

05/04/2013

Depois de várias opções com ajuda de todos aqui e procurar muito na internet consegui uma solução e gostaria de compartilhar com todos.

1 - Criei uma função para pegar o time zone.

function PegaTimeZone: string;
var
TimeZone: TTimeZoneInformation;
begin
GetTimeZoneInformation(TimeZone);

Result := FormatFloat('00', TimeZone.Bias div -60) + ':00';
end;

2 - Formatei a data e hora e incrementei com a função.

InfEvento.DhEvento := FormatDateTime('YYYY-MM-DD', Now) + 'T' + FormatDateTime('hh:nn:ss', Now) + PegaTimeZone;

obrigado

abraço a todos
GOSTEI 1

Mais Respostas

Joel Rodrigues

Joel Rodrigues

03/04/2013

Qual banco de dados você está usando?
GOSTEI 0
Ureis

Ureis

03/04/2013

Estou usando Sql Server 2008.

Mas acredito que tenha que pegar esta informação pelo Delphi.
Mas aceito todas as idéias.

obrigado.
GOSTEI 0
Rafael Cunha

Rafael Cunha

03/04/2013

O comando abaixo retorna a data como você precisa.

SELECT SYSDATETIMEOFFSET()    
AS [SYSDATETIMEOFFSET] 
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

03/04/2013

Veja se este link te ajuda:
[url]http://msdn.microsoft.com/en-us/library/bb630289.aspx[/url]
GOSTEI 0
Ureis

Ureis

03/04/2013

Tem como formata não colocando os milisegundos?

Tem que ficar exatamente conforme o Ex.: 2013-04-01T13:14:12-03:00

obrigado.
GOSTEI 0
Ana Santos

Ana Santos

03/04/2013

Dê uma vista de olhos em :

http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime


Faça o seguinte teste no Delphi :

ShowMessage('dd/mm/yy hh:nn:ss = '+
FormatDateTime('yyyy-mm-dd',(now))+'T'+ FormatDateTime('hh:nn:ss_zzz', (NOW)));
GOSTEI 0
Ureis

Ureis

03/04/2013

Bom dia a todos....

Agradeço a todos pelas dicas postadas.
Será que alguém tem mais alguma idéia.

Preciso mostrar exatamente desta maneira: '2013-04-01T13:14:12-03:00'. Obs.: Os segundos tem que ter apenas 2 casas.

GOSTEI 0
Rafael Cunha

Rafael Cunha

03/04/2013

De onde você pretende retornar essa Data? Isso é para nota fiscal eletrônica?
GOSTEI 0
Ureis

Ureis

03/04/2013

Sim. Correto.
GOSTEI 0
Ureis

Ureis

03/04/2013

De onde você pretende retornar essa Data? Isso é para nota fiscal eletrônica?


Sim. Correto.
GOSTEI 0
Jonatas Alves

Jonatas Alves

03/04/2013

Olá,

uma forma de simplificar este código, não que ele esteja errado, por favor não me levem a mal!!!

Para evitar duas formatações de data, façam o seguinte:

InfEvento.DhEvento := formatDateTime( 'yyyy-mm-dd"T"hh:mm:ss', now ) + FormatFloat( '00', ( fusoHorario.Bias div fusoHorario.DaylightBias ) ) + ':00' ;


obs 1: Dentro do "formatDateTime" (do DELPHI), caso não queiram que um determinado caractere seja compreendido erroneamente pelo compilado, é necessário envolver este caractere com aspas duplas ( "T" ). No caso do 'T', caso não seja realizado isto, é retornado "ShortTimeFormat", ou seja, o compilador entende que solicitamos o horário "abreviado" ;
obs 2: Vejam que no lugar de "-60" utilizei a propriedade "DaylightBias" da classe "TTimeZoneInformation"

Espero que ajude!
GOSTEI 0
POSTAR