Ответ 1
Используйте формат ISO-8601, как описано в http://en.wikipedia.org/wiki/ISO_8601
Если вам нужно сохранить место для хранения, вы можете использовать "компактный" макет, например. '20090621T054523'.
Вы можете использовать, например. FormatDateTime('yyyymmddThhnnss',aDateTime)
, чтобы произвести его.
О часовом поясе и локализации (из Википедии):
В ISO 8601 нет указателей часовых поясов. Время отображается только по местному времени или по отношению к UTC.
Если информация о соотношении UTC не указана с указанием времени, время считается локальным. Хотя безопасно предполагать местное время при общении в одном и том же часовом поясе, оно неоднозначно, когда используется при общении в разных часовых поясах. Обычно предпочтительно указывать часовой пояс (обозначение зоны), используя стандартную нотацию.
Итак, вам нужно лучше преобразовать время в UTC, а затем добавить "Z" в конце отметки времени. Или используйте + hh/-hh в соответствии с вашим местным часовым поясом. В следующий раз все относятся к одному моменту: "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
будет быстрее, чем любое другое преобразование с плавающей запятой.