uso formato ISO-8601, como se detalla en http://en.wikipedia.org/wiki/ISO_8601
Si necesita ahorrar espacio de almacenamiento, puede utilizar el " diseño compacto, p. ej. '20090621T054523'.
Puede usar, p. FormatDateTime('yyyymmddThhnnss',aDateTime)
para producirlo.
Acerca de zona de tiempo y de localización (de Wikipedia):
No hay designadores de zona horaria en ISO 8601. El tiempo sólo se representa como la hora local o en relación con UTC.
Si no se proporciona información de relación UTC con una representación de tiempo, se supone que la hora está en hora local. Si bien puede ser seguro asumir la hora local cuando se comunica en la misma zona horaria, es ambiguo cuando se usa para comunicarse a través de diferentes zonas horarias. Por lo general, es preferible indicar un huso horario (designador de zona) utilizando la notación del estándar.
Por lo tanto, conviene que convierta la hora en UTC, luego agregue 'Z' al final de la marca de tiempo. O use + hh/-hh según su zona horaria local. Los siguientes tiempos se refieren al mismo momento: "18: 30Z", "22: 30 + 04", "1130-0700" y "15: 00-03: 30".
Para una mejor resolución, puede agregar el tiempo en segundos agregando una fracción después de una coma o un carácter de punto: p. Ej.para indicar "14 horas, 30 minutos, 10 segundos y 500 ms", representarlo como "14: 30: 10,5", "143010,5", "14: 30: 10.5" o "143010.5". Puede agregar varios decimales para aumentar la resolución.
Si necesita rutinas de conversión rápida (ISO8601 trabajan con UTF-8 contenido), echar un vistazo a la parte correspondiente de SynCommons.pas. Es mucho más rápido que las funciones predeterminadas SysUtils
.
PS:
si su propósito es sólo para almacenar TDateTime como texto en una aplicación Delphi puro, se puede utilizar un no estándar pero rápido:
function DateTimeToText(const aDateTime: TDateTime): string;
begin
result := IntToStr(PInt64(@aDateTime)^);
end;
function TextToDateTime(const aText: string): TDateTime;
begin
PInt64(@result)^ := StrToInt64Def(aText,0);
end;
Utilizando el Int64
binaria el diseño de la estructura de memoria TDateTime/double
será más rápido que cualquier otra conversión relacionada con coma flotante.
DateTimeToStr es probable que pierda más precisión que FloatToStr. – Misha