Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StrToSQLTimeStamp отобразить миллисекунды / 11 сообщений из 11, страница 1 из 1
17.02.2021, 13:39
    #40046233
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
Привет, использую в одном проекте тип
Код: 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
17.02.2021, 13:53
    #40046245
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
В 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
17.02.2021, 14:02
    #40046254
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
_Vasilisk_,
спасибо за подсказку/наводку, заменил (после того, как посмотрел на реализацию ExtractMSecFromString) в XML-файле разделитель между секундами и миллисекундами с '.' на ':' (time separator), нормально разобралось, миллисекунды норм. прочитались.
Т.е. вот такое прочитало нормально
Код: xml
1.
<start>17.02.2021 15:30:20:300</start>
...
Рейтинг: 0 / 0
17.02.2021, 19:41
    #40046416
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
s62
заменил (после того, как посмотрел на реализацию ExtractMSecFromString) в XML-файле разделитель между секундами и миллисекундами с '.' на ':' (time separator), нормально разобралось, миллисекунды норм. прочитались.
Не то сделали. Верните обратно и добавьте
Код: pascal
1.
FS.DecimalSeparator = '.';
...
Рейтинг: 0 / 0
17.02.2021, 22:48
    #40046463
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
_Vasilisk_,
проверю. Но, как сделал, меня вполне устраивает. При отображении на форме я показываю через точку, а то, что в xml хранится через двоеточие, никому особо не мешает. Разве что кто-то вручную править файл станет и не обратит внимания, что нужно двоеточие.
...
Рейтинг: 0 / 0
17.02.2021, 23:19
    #40046474
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
Переделал. Чтобы везде одинаково было, так всё-таки красивее в плане логики.
...
Рейтинг: 0 / 0
18.02.2021, 00:04
    #40046482
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
_Vasilisk_, спасибо.
...
Рейтинг: 0 / 0
18.02.2021, 10:41
    #40046547
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
Вообще формат времени в XML это не абы кому как нравится, а стандарт. Так что никаких : между сек и мсек
...
Рейтинг: 0 / 0
18.02.2021, 11:29
    #40046559
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
deleted
...
Рейтинг: 0 / 0
18.02.2021, 12:15
    #40046587
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
Fr0sT-Brutal
формат времени в XML это не абы кому как нравится, а стандарт.
Который записывается принципиально по другому. А с форматом dd.mm.yyyy hh:nn:ss.zzz уже не важно точка там или двоеточие
...
Рейтинг: 0 / 0
18.02.2021, 13:12
    #40046634
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StrToSQLTimeStamp отобразить миллисекунды
_Vasilisk_
Который записывается принципиально по другому. А с форматом dd.mm.yyyy hh:nn:ss.zzz уже не важно точка там или двоеточие

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


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