Используйте формат ISO-8601, как описано в http://en.wikipedia.org/wiki/ISO_8601
Если вам нужно сэкономить место для хранения, вы можете использовать «компактную» компоновку, например, '20090621T054523'.
Вы можете использовать, например, FormatDateTime('yyyymmddThhnnss',aDateTime)
чтобы произвести его.
О часовом поясе и локализации (из википедии):
В ISO 8601 нет указателей часовых поясов. Время представляется только как местное время или относительно UTC.
Если информация о соотношении UTC не указана в представлении времени, предполагается, что время указано в местном времени. Хотя при общении в одном и том же часовом поясе можно предположить местное время, оно может быть неоднозначным при использовании в разных часовых поясах. Обычно предпочтительно указывать часовой пояс (обозначение зоны), используя обозначения стандарта.
Так что вам лучше преобразовать время в UTC, а затем добавить 'Z' в конце отметки времени. Или используйте + чч / чч в соответствии с вашим местным часовым поясом. Следующие моменты времени относятся к одному и тому же моменту: «18: 30Z», «22: 30 + 04», «1130-0700» и «15: 00-03: 30».
Для лучшего разрешения вы можете добавить подсекунду, добавив дробь после запятой или символа точки: например, обозначать «14 часов, 30 минут, 10 секунд и 500 мс», обозначать его как «14: 30: 10,5», «143010,5», «14: 30: 10,5» или «143010,5». Вы можете добавить несколько десятичных знаков для увеличения разрешения.
Если вам нужны быстрые процедуры преобразования Iso8601 (работа с содержимым UTF-8), взгляните на соответствующую часть в SynCommons.pas . Это намного быстрее, чем стандартные функции SysUtils
.
PS:
Если ваша цель - просто сохранить TDateTime как текст в чистом приложении Delphi, вы можете использовать не стандартный , но быстрый:
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;
Использование двоичного макета Int64
структуры памяти TDateTime/double
будет быстрее, чем любое другое преобразование, связанное с плавающей точкой.