Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 09.02.2020, 00:30   #1
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 19
По умолчанию Преобразовать строку в 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

Либо другую функцию использовать ? или делать предварительно проверку строки (это сложновато, так как и первые варианты должны работать) ?
melky вне форума Ответить с цитированием
Старый 09.02.2020, 02:04   #2
Desc
Форумчанин
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 553
По умолчанию

Ни фиг не понятно.
Помощь в чем требуется?
Все что понял:
Цитата:
Сообщение от melky Посмотреть сообщение
Добрый день всем, есть строки с датами и временем формата (2019-11-07,20:40:20)
С таким все хорошо
Дальше нет, не понял,
Цитата:
Сообщение от melky Посмотреть сообщение
Либо другую функцию использовать ? и
Лиш-бы что что-ли, лабораторка на отвали?
Desc вне форума Ответить с цитированием
Старый 09.02.2020, 02:33   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,640
По умолчанию

Отрезать нафиг этот день недели перед преобразованием, ибо он ничего нового не даёт
Black Fregat вне форума Ответить с цитированием
Старый 09.02.2020, 11:48   #4
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 19
По умолчанию

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 в 12:06.
melky вне форума Ответить с цитированием
Старый 09.02.2020, 14:41   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 2,168
По умолчанию

По-моему, никакой сложности нет. Если первый вариант работает, второй вариант преобразовать в первый во временной строке и эту временную строку подать в виде аргумента в DateTime.Parse(
digitalis вне форума Ответить с цитированием
Старый 09.02.2020, 16:01   #6
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 19
По умолчанию

Да, сейчас так и делаю. Это 1-й вариант решения, завернул DateTime.Parse в try - catch и добавляю в качестве исключения. Но тогда придется в исключения добавлять каждый прибор, у которого будет не стандартный формат времени.
Хочется пойти по другому пути, раз у меня есть шаблоны. Как-то описывать в шаблоне нестандартный формат а код сделать неизменным, чтобы не пришлось его постоянно править...

Странно, что для формата времени существует сокращение ddd или dddd, короткое название дня недели или длинное. И это можно поменять при помощи AbbreviatedDayNames. То есть можно записать вместо Пн, Вт, Ср, Чт, Пт, Сб, Вс например 01, 02, 03, 04, 05, 06, 00

Но тоже ругается...

Есть еще DateTime.ParseExact но что-то с ним разобраться не получается....

Последний раз редактировалось melky; 09.02.2020 в 16:04.
melky вне форума Ответить с цитированием
Старый 09.02.2020, 21:22   #7
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 19
По умолчанию

Победил этот формат даты.

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, пробовал и смещение и еще что-то, в итоге указал, что это миллисекунды.
melky вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать varchar в datetime OmegaBerkut SQL, базы данных 1 18.06.2019 07:38
Ошибка:system formatexception: не удалось преобразовать значение параметра из string в dateTime что делать как исправить C# nifilim0609 C# (си шарп) 1 22.10.2017 15: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 17:52


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS