powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StrToSQLTimeStamp отобразить миллисекунды
11 сообщений из 11, страница 1 из 1
StrToSQLTimeStamp отобразить миллисекунды
    #40046233
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, использую в одном проекте тип
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
  TSQLTimeStamp = record
    Year: Word;
    Month: Word;
    Day: Word;
    Hour: Word;
    Minute: Word;
    Second: Word;
    Fractions: LongWord;
  end;


из модуля Data.SqlTimSt.

Отображаются в том числе миллисекунды. Для отображения и сохранения в XML использую функцию
Код: pascal
1.
function SQLTimeStampToStr(const Format: string; DateTime: TSQLTimeStamp): string;


Вот таким образом, например:
Код: pascal
1.
  SubNode.Text := SqlTimeStampToStr('dd.mm.yyyy hh:nn:ss.zzz', aAction.Start);


Нормально сохраняется, вот узел из XML
Код: xml
1.
<start>17.02.2021 15:30:20.500</start>



Для загрузки из XML использую
Код: pascal
1.
function StrToSQLTimeStamp(const S: string; const FormatSettings: TFormatSettings): TSQLTimeStamp;


(Там готовых вариантов - 2, этот и то же без FormatSettings).
Обрезаются миллисекунды.
Задаю свойства FormatSettings вот так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var FS: TFormatSettings;
begin
  FS := TFormatSettings.Create;
  FS.ShortDateFormat := 'dd.mm.yyyy'; //дату показывает нормально
  FS.LongDateFormat := 'dd.mm.yyyy'; //это вообще наверное не нужно
  FS.LongTimeFormat := 'hh:nn:ss.zzz';
  FS.ShortTimeFormat := 'hh:nn:ss.zzz';
  ...
  Ovr.Start := StrToSQLTimeStamp(aNode.ChildValues['start'], FS);
  ...


Миллисекунды обрезает при преобразовании строки. Я заглянул, как реализована функция, пока не до конца разобрался, ну и напишу, если что, свою для разбора строки, но может быть кто-то сталкивался с такой ситуацией иил похожим, знает, что задать в FormatSettings или еще какой-то нюанс, чтобы просто воспользоваться этой функцией и чтобы из строки передались миллисекунды? Там в функции StrToSQLTimeStamp сначала строка преобразуется в TDateTime, а потом уже в TSQLTimeStamp.
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046245
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В XE3 и Rio так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
function TryStrToSQLTimeStamp(const S: string; var TimeStamp: TSQLTimeStamp; const FormatSettings: TFormatSettings): Boolean;
var
  DT: TDateTime;
begin
  Result := TryStrToDateTime(S, DT, FormatSettings);
  if Result then
  begin
    TimeStamp := DateTimeToSQLTimeStamp(DT);
    if TimeStamp.Fractions = 0 then
      TimeStamp.Fractions := ExtractMSecFromString(S, FormatSettings);

    Result := IsSqlTimeStampValid(TimeStamp);
  end;
  if not Result then
    TimeStamp := NullSQLTimeStamp;
end;

function DateTimeToSQLTimeStamp(const DateTime: TDateTime): TSQLTimeStamp;
var
  F: Word;
begin
  DecodeDate(DateTime, Result.Year, Result.Month, Result.Day);
  DecodeTime(DateTime, Result.Hour, Result.Minute, Result.Second, F);
  Result.Fractions := F;
end;
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046254
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,
спасибо за подсказку/наводку, заменил (после того, как посмотрел на реализацию ExtractMSecFromString) в XML-файле разделитель между секундами и миллисекундами с '.' на ':' (time separator), нормально разобралось, миллисекунды норм. прочитались.
Т.е. вот такое прочитало нормально
Код: xml
1.
<start>17.02.2021 15:30:20:300</start>
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046416
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62
заменил (после того, как посмотрел на реализацию ExtractMSecFromString) в XML-файле разделитель между секундами и миллисекундами с '.' на ':' (time separator), нормально разобралось, миллисекунды норм. прочитались.
Не то сделали. Верните обратно и добавьте
Код: pascal
1.
FS.DecimalSeparator = '.';
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046463
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,
проверю. Но, как сделал, меня вполне устраивает. При отображении на форме я показываю через точку, а то, что в xml хранится через двоеточие, никому особо не мешает. Разве что кто-то вручную править файл станет и не обратит внимания, что нужно двоеточие.
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046474
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переделал. Чтобы везде одинаково было, так всё-таки красивее в плане логики.
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046482
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, спасибо.
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046547
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще формат времени в XML это не абы кому как нравится, а стандарт. Так что никаких : между сек и мсек
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046559
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deleted
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046587
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
формат времени в XML это не абы кому как нравится, а стандарт.
Который записывается принципиально по другому. А с форматом dd.mm.yyyy hh:nn:ss.zzz уже не важно точка там или двоеточие
...
Рейтинг: 0 / 0
StrToSQLTimeStamp отобразить миллисекунды
    #40046634
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Который записывается принципиально по другому. А с форматом dd.mm.yyyy hh:nn:ss.zzz уже не важно точка там или двоеточие

А ну да, там SQL, а не XML
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StrToSQLTimeStamp отобразить миллисекунды
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]