Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2020, 23:30   #1
melky
Пользователь
 
Регистрация: 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

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

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

Отрезать нафиг этот день недели перед преобразованием, ибо он ничего нового не даёт
Black Fregat вне форума Ответить с цитированием
Старый 09.02.2020, 10:48   #4
melky
Пользователь
 
Регистрация: 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.
melky вне форума Ответить с цитированием
Старый 09.02.2020, 13:41   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

По-моему, никакой сложности нет. Если первый вариант работает, второй вариант преобразовать в первый во временной строке и эту временную строку подать в виде аргумента в DateTime.Parse(
digitalis вне форума Ответить с цитированием
Старый 09.02.2020, 15:01   #6
melky
Пользователь
 
Регистрация: 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.
melky вне форума Ответить с цитированием
Старый 09.02.2020, 20:22   #7
melky
Пользователь
 
Регистрация: 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, пробовал и смещение и еще что-то, в итоге указал, что это миллисекунды.
melky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать 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