Парсинг даты ?

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Записи
  • #38747
    manjey73
    Участник

    Собственно вопрос, есть ли в методах ScadaUtils или еще где методы парсинга даты, которые не зависят от культуры и проверяют все варианты?

    Суть в чем, я записал дату в виде 02.06.2025 в файл, а потом запустил драйвер, модуль на другой культуре, где 6/2/2025 — надо чтобы дата прочиталась так же правильно…

    #38748
    JurasskPark
    Участник

    А стандарартное DataTime.Parse(«строка»); не работает?

    #38750
    manjey73
    Участник

    Ну если код записал дату и потом прочитал, то работает.
    Но если мы на одной системе запишем дату скажем в русской локали, а потом будет чтение в английской — то упадет и дата не будет распознана.

    Я и спрашиваю, может есть готовый код в методах ScadaUtils чтобы подсовывая дату от любой локали ее распознала противоположная ?

    То есть я записал в коротком формате 15.04.2025 (15 апреля) в русской локали
    А там где английская, оно прочтется и перепишется в 4/15/2025 и не будет мне ругаться 🙂

    #38751
    manjey73
    Участник

    так же и в обратку потом…
    Не, можно конечно всегда приводить к английской, но хотелось бы в автомате.

    • Ответ изменён 1 год, 3 месяца назад пользователем manjey73.
    #38756
    Mikhail
    Модератор

    В ScadaUtils нет готового метода. Добавьте свою формулу в таблицу Скрипты с использованием методов класса DateTime. Там можно задать культуру, с которой разбирается строка.

    #38759
    manjey73
    Участник

    ну я как бы про драйвер и модуль говорю 🙂
    Сам пока не нашел. Единственный путь это перебирать через TryParse ловя исключения.

    Другой путь — как-то в коде драйвера например можно получить текущую локаль?
    Хотя не знаю, как это может помочь? ну получил я en-EN, а дата записана в ru-RU была.

    • Ответ изменён 1 год, 3 месяца назад пользователем manjey73.
    #38773
    JurasskPark
    Участник

    Но если мы на одной системе запишем дату скажем в русской локали, а потом будет чтение в английской — то упадет и дата не будет распознана.

    А кто источник даты записи и чтения?
    Просто если такая проблема, то читать и записывать дату как Михаил в double в текстовый файл. ))))

    #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 ?
    опять же, точка и запятая прилетит от локали 🙂

    Вроде пока оно само в себе, то нормально работает

    #38775
    manjey73
    Участник

    проблема у меня была в том, что я писал дату как dd.MM.yyyy — это соответствует русской локали, а при считывании работало через локаль. Пока на своем буке тестировал все было хорошо, а потом кинул на Linux, а там локаль английская.

    Вот и задумался, а как передавать даты в тексте и чтобы автоматом проверялось именно при парсинге, так как источник данных неизвестен (то есть учитываем то, что мы не знаем, какая локаль на источнике данных была включена в момент записи)

    #38776
    JurasskPark
    Участник

    2025-01-01 00:00:00 — с таким форматом никогда нет проблем.
    Плюс при сохранении можно указывать формат записи и чтения.

    #38777
    manjey73
    Участник

    Для любой комбинации можно указать формат записи. Это вроде не проблема.

    Ещё раз, тебе прислали «письмо» и там есть дата, какая локаль была при составлении письма неизвестно.
    В этом проблема, сделать код, который поймав ошибку, начнет перебирать локали. Думал есть какой-то готовый механизм, по этому и спросил.
    А что у тебя 01 месяц, а что число? 🤣

    • Ответ изменён 1 год, 3 месяца назад пользователем manjey73.
    #38782
    Mikhail
    Модератор

    Драйвер «не знает» в какой локали работает пользователь. Либо нужно поддерживать какой-либо определённый формат даты, либо пытаться разобрать сначала один, потом другой, либо сделать настройку.

    #38783
    Mikhail
    Модератор

    Когда для команды задан формат «Дата», то Вебстанция отправляет команду в виде строки всегда в формате yyyy-MM-dd.

Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Для ответа в этой теме необходимо авторизоваться.