Стартовая страница › Форумы › Разработка и интеграция › Парсинг даты ?
- В этой теме 12 ответов, 3 участника, последнее обновление 1 год, 3 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
06.06.2025 в 10:25 #38747
manjey73УчастникСобственно вопрос, есть ли в методах ScadaUtils или еще где методы парсинга даты, которые не зависят от культуры и проверяют все варианты?
Суть в чем, я записал дату в виде 02.06.2025 в файл, а потом запустил драйвер, модуль на другой культуре, где 6/2/2025 — надо чтобы дата прочиталась так же правильно…
06.06.2025 в 10:51 #38748
JurasskParkУчастникА стандарартное DataTime.Parse(«строка»); не работает?
06.06.2025 в 12:05 #38750
manjey73УчастникНу если код записал дату и потом прочитал, то работает.
Но если мы на одной системе запишем дату скажем в русской локали, а потом будет чтение в английской — то упадет и дата не будет распознана.Я и спрашиваю, может есть готовый код в методах ScadaUtils чтобы подсовывая дату от любой локали ее распознала противоположная ?
То есть я записал в коротком формате 15.04.2025 (15 апреля) в русской локали
А там где английская, оно прочтется и перепишется в 4/15/2025 и не будет мне ругаться 🙂06.06.2025 в 12:05 #38751
manjey73Участниктак же и в обратку потом…
Не, можно конечно всегда приводить к английской, но хотелось бы в автомате.-
Ответ изменён 1 год, 3 месяца назад пользователем
manjey73.
06.06.2025 в 12:41 #38756
MikhailМодераторВ ScadaUtils нет готового метода. Добавьте свою формулу в таблицу Скрипты с использованием методов класса DateTime. Там можно задать культуру, с которой разбирается строка.
06.06.2025 в 12:52 #38759
manjey73Участникну я как бы про драйвер и модуль говорю 🙂
Сам пока не нашел. Единственный путь это перебирать через TryParse ловя исключения.Другой путь — как-то в коде драйвера например можно получить текущую локаль?
Хотя не знаю, как это может помочь? ну получил я en-EN, а дата записана в ru-RU была.-
Ответ изменён 1 год, 3 месяца назад пользователем
manjey73.
07.06.2025 в 11:38 #38773
JurasskParkУчастникНо если мы на одной системе запишем дату скажем в русской локали, а потом будет чтение в английской — то упадет и дата не будет распознана.
А кто источник даты записи и чтения?
Просто если такая проблема, то читать и записывать дату как Михаил в double в текстовый файл. ))))07.06.2025 в 11:54 #38774
manjey73УчастникМодуль или драйвер пока. я в целом спрашиваю собственно.
Как-то же некрасиво писать в double для отображения 🙂Общие данные (1)
—————-
SPT941_20_D9999_A0 = SN_0 Дата поверки 17.06.2025 Часовой архив 01.01.0001 0:00:00 Дневной архив 01.01.0001 Месячный архив 01.01.0001и тут тебе вместо Дата поверки 17.06.2025 будет Дата поверки 49176,23645 ?
опять же, точка и запятая прилетит от локали 🙂Вроде пока оно само в себе, то нормально работает
07.06.2025 в 12:19 #38775
manjey73Участникпроблема у меня была в том, что я писал дату как dd.MM.yyyy — это соответствует русской локали, а при считывании работало через локаль. Пока на своем буке тестировал все было хорошо, а потом кинул на Linux, а там локаль английская.
Вот и задумался, а как передавать даты в тексте и чтобы автоматом проверялось именно при парсинге, так как источник данных неизвестен (то есть учитываем то, что мы не знаем, какая локаль на источнике данных была включена в момент записи)
07.06.2025 в 18:16 #38776
JurasskParkУчастник2025-01-01 00:00:00 — с таким форматом никогда нет проблем.
Плюс при сохранении можно указывать формат записи и чтения.07.06.2025 в 19:03 #38777
manjey73УчастникДля любой комбинации можно указать формат записи. Это вроде не проблема.
Ещё раз, тебе прислали «письмо» и там есть дата, какая локаль была при составлении письма неизвестно.
В этом проблема, сделать код, который поймав ошибку, начнет перебирать локали. Думал есть какой-то готовый механизм, по этому и спросил.
А что у тебя 01 месяц, а что число? 🤣-
Ответ изменён 1 год, 3 месяца назад пользователем
manjey73.
08.06.2025 в 20:19 #38782
MikhailМодераторДрайвер «не знает» в какой локали работает пользователь. Либо нужно поддерживать какой-либо определённый формат даты, либо пытаться разобрать сначала один, потом другой, либо сделать настройку.
08.06.2025 в 20:21 #38783
MikhailМодераторКогда для команды задан формат «Дата», то Вебстанция отправляет команду в виде строки всегда в формате yyyy-MM-dd.
-
Ответ изменён 1 год, 3 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.