|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.02.2020, 23:30 | #1 |
Пользователь
Регистрация: 27.05.2018
Сообщений: 46
|
Преобразовать строку в DateTime в которой есть номер недели?
Добрый день всем, есть строки с датами и временем формата (2019-11-07,20:40:20)
С таким все хорошо dtfi = new DateTimeFormatInfo(); dtfi.ShortDatePattern = "yyyy-MM-dd,HH:mm:ss"; Убрав скобки d = DateTime.Parse(data, dtfi).ToOADate(); работает Но вот есть дата и время в таком виде (20:55:44,06.08.02.20,0) HH:mm:ss,(*)dd.MM.yy - что тут (*) добавить или исключить, чтобы обработать день недели 0-воскресенье, 6-суббота ну еще после года стоит ,0 Либо другую функцию использовать ? или делать предварительно проверку строки (это сложновато, так как и первые варианты должны работать) ? |
09.02.2020, 01:04 | #2 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,063
|
Ни фиг не понятно.
Помощь в чем требуется? Все что понял: Цитата:
Лиш-бы что что-ли, лабораторка на отвали?
I am not a wizard, I am just learning.
|
|
09.02.2020, 01:33 | #3 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Отрезать нафиг этот день недели перед преобразованием, ибо он ничего нового не даёт
|
09.02.2020, 10:48 | #4 |
Пользователь
Регистрация: 27.05.2018
Сообщений: 46
|
Desc что вам не понятно ? когда строки стандартные, код, который парсит дату из строки работает.
А когда в строке дата, где производитель прибора добавил день недели и год сделал в виде 20,0 Идет ошибка. Black Fregat отрезать наверное не проблема, но и правильные варианты должны продолжить работать. То есть огульно резать и кромсать строки нельзя... один прибор дату отдает так (2019-11-07,20:40:20) а другой так (20:55:44,06.08.02.20,0) в первом случае я задаю в паттерн формата "yyyy-MM-dd,HH:mm:ss" и все работает во втором случае нет на msdn такого представления, нет возможности корректно задать паттерн. Нужен какой-то другой подход, но я его не найду... з.ы. не лабораторка, драйвер протокола МЭК 61107 и какой производитель еще выеб... я не знаю... Отрезать проблема, код должен работать при любых вариантах. Я настраиваю pattern в серилизованном xml, то есть вижу, в каком виде дату отдает прибор, соответственно указываю, что эта переменная datetime и прописываю формат. Не ожидал, что окажется формат даты, нестандартный для C# и как теперь разрулить ситуацию не могу придумать.... Последний раз редактировалось melky; 09.02.2020 в 11:06. |
09.02.2020, 13:41 | #5 |
Старожил
Регистрация: 04.02.2011
Сообщений: 4,550
|
По-моему, никакой сложности нет. Если первый вариант работает, второй вариант преобразовать в первый во временной строке и эту временную строку подать в виде аргумента в DateTime.Parse(
|
09.02.2020, 15:01 | #6 |
Пользователь
Регистрация: 27.05.2018
Сообщений: 46
|
Да, сейчас так и делаю. Это 1-й вариант решения, завернул DateTime.Parse в try - catch и добавляю в качестве исключения. Но тогда придется в исключения добавлять каждый прибор, у которого будет не стандартный формат времени.
Хочется пойти по другому пути, раз у меня есть шаблоны. Как-то описывать в шаблоне нестандартный формат а код сделать неизменным, чтобы не пришлось его постоянно править... Странно, что для формата времени существует сокращение ddd или dddd, короткое название дня недели или длинное. И это можно поменять при помощи AbbreviatedDayNames. То есть можно записать вместо Пн, Вт, Ср, Чт, Пт, Сб, Вс например 01, 02, 03, 04, 05, 06, 00 Но тоже ругается... Есть еще DateTime.ParseExact но что-то с ним разобраться не получается.... Последний раз редактировалось melky; 09.02.2020 в 15:04. |
09.02.2020, 20:22 | #7 |
Пользователь
Регистрация: 27.05.2018
Сообщений: 46
|
Победил этот формат даты.
dtfi.FullDateTimePattern = "HH:mm:ss,ddd.dd.MM.yy,f"; // такую строку вычитываю сюда из шаблона string formats = "HH:mm:ss,ddd.dd.MM.yy,f"; // тут непонятно на кой повторять ? dtfi.AbbreviatedDayNames = new string[] { "00", "01", "02", "03", "04", "05", "06" }; // указываем, что дни недели у нас в таком виде, причем это надо выполнить после dtfi.FullDateTimePattern = и начало с воскресенья. d = DateTime.ParseExact(data, formats, dtfi).ToOADate(); // Преобразуем DateTime в double // потом отправляем в систему, которая его поймет Ну и оборачиваем в try catch (20:55:44,06.08.02.20,0) - не знаю, что за 0, пробовал и смещение и еще что-то, в итоге указал, что это миллисекунды. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразовать varchar в datetime | OmegaBerkut | SQL, базы данных | 1 | 18.06.2019 06:38 |
Ошибка:system formatexception: не удалось преобразовать значение параметра из string в dateTime что делать как исправить C# | nifilim0609 | C# (си шарп) | 1 | 22.10.2017 14:22 |
Как вычислить номер месяца, имея номер недели? | Ras2im | Microsoft Office Excel | 17 | 07.10.2012 03:31 |
Даты и номер недели! | stalsoft | C# (си шарп) | 2 | 02.08.2012 11:11 |
порядковый номер недели | skalt12 | Общие вопросы Delphi | 7 | 01.12.2009 16:52 |