Ну помогите все-таки разобраться с датами!
От: САС  
Дата: 25.11.02 09:36
Оценка:
Есть программа перечач, структура примерно такая:

Понедельник, 26 января 2002г.
13:20 перечача
14:00 передача
Вторник, 27 января 2002г.
....

Это все парсится, регекспом я выдираю дату и время каждой передачи.
Алгоритм такой: как только регексп совпал со строчкой даты, заносим ее в DateTime:
DateTime date = new DateTime(iYear, iMonth, iDay);


Читаем файл дальше, пришло совпадение со вторым регекспом (на ловлю времени и имени программы). И это выдранное время нужно занести в ранее созданный объект DateTime. Потом эти дата/время обрабатываются и заносятся куда нужно. Далее ловится вторая программа, дату в объекте нужно оставить прежней, а время сменить и снова обработать. И т.д.
Другими словами — как изменить в созданном объете DateTime время?
Re: Ну помогите все-таки разобраться с датами!
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.02 09:51
Оценка:
Здравствуйте, САС, Вы писали:

САС>Читаем файл дальше, пришло совпадение со вторым регекспом (на ловлю времени и имени программы). И это выдранное время нужно занести в ранее созданный объект DateTime. Потом эти дата/время обрабатываются и заносятся куда нужно. Далее ловится вторая программа, дату в объекте нужно оставить прежней, а время сменить и снова обработать. И т.д.

САС>Другими словами — как изменить в созданном объете DateTime время?

А почему нельзя воспользоваться свойствами:
Minute
Second
Hour
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1059.22155 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Ну помогите все-таки разобраться с датами!
От: Blazkowicz Россия  
Дата: 25.11.02 10:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А почему нельзя воспользоваться свойствами:

VD>Minute
VD>Second
VD>Hour
VD>

VD>


Так они readonly.

А почему не сделать так:



DateTime dtNew = new DateTime(dtOld.Year, dtOld.Month, dtOld.Day, iNewHours, iNewMinutes, iNewSeconds);
Re[3]: Ну помогите все-таки разобраться с датами!
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.02 10:14
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Так они readonly.


Да. Действительно. Ну тогда можно AddХхх применять.

B>А почему не сделать так:


B>
B>DateTime dtNew = new DateTime(dtOld.Year, dtOld.Month, dtOld.Day, iNewHours, iNewMinutes, iNewSeconds);
B>


От чего же нельзя? Можно конечно. Думаю даже довольно шустро выйдет.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1059.22155 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Ну помогите все-таки разобраться с датами!
От: Blazkowicz Россия  
Дата: 25.11.02 10:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да. Действительно. Ну тогда можно AddХхх применять.


А AddХхх может привести к багам, если в DateTime кроме даты уже было какое-то время.
Re[5]: Ну помогите все-таки разобраться с датами!
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.02 10:41
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>А AddХхх может привести к багам, если в DateTime кроме даты уже было какое-то время.


Дык нужно старое вычитать. Хотя тогда уже создать новую дату будет проще. Вообще если нужно рассчеты с датами производить, то рпоще перевести ее в doubl.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1059.22155 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ну помогите все-таки разобраться с датами!
От: САС  
Дата: 25.11.02 10:50
Оценка:
Здравствуйте, Blazkowicz, Вы писали:


B>А почему не сделать так:


B>

B>DateTime dtNew = new DateTime(dtOld.Year, dtOld.Month, dtOld.Day, iNewHours, iNewMinutes, iNewSeconds);

B>


А как такое решение с точки зрения выделения памяти? Или сборщик мусора все это обработает корректно? Просто этот блок будет выполняться в цикле, а количество итераций совсем не детское В C++ можно было освобождать пямять вручную, и не могу отвыкнуть от этой схемы.
Re[6]: Ну помогите все-таки разобраться с датами!
От: САС  
Дата: 25.11.02 10:55
Оценка:
Здравствуйте, VladD2, Вы писали:

B>>А AddХхх может привести к багам, если в DateTime кроме даты уже было какое-то время.


VD>Дык нужно старое вычитать. Хотя тогда уже создать новую дату будет проще. Вообще если нужно рассчеты с датами производить, то рпоще перевести ее в doubl.


А алгоритм перевода не подскажешь? Или в .net для этого уже все реализовано? Куда смотреть?
Re[4]: Ну помогите все-таки разобраться с датами!
От: Blazkowicz Россия  
Дата: 25.11.02 10:57
Оценка:
Здравствуйте, САС, Вы писали:

САС>А как такое решение с точки зрения выделения памяти? Или сборщик мусора все это обработает корректно? Просто этот блок будет выполняться в цикле, а количество итераций совсем не детское В C++ можно было освобождать пямять вручную, и не могу отвыкнуть от этой схемы.


Хм, чисто теоретически сборщик должен все собрать. Хотя на практике он кажется никому ничего не должен.
Re[7]: Ну помогите все-таки разобраться с датами!
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.02 11:31
Оценка:
Здравствуйте, САС, Вы писали:

САС>А алгоритм перевода не подскажешь? Или в .net для этого уже все реализовано? Куда смотреть?


Да в общем алгоритм довольно простой: ToOADate

До точки даты в днях. После точки время в эээ... проде милисекундах. Работать можно обычными арифметическими действиями.
... << RSDN@Home 1.0 alpha VladD2.1.0.alpha 13.1.0.1059.22155 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Ну помогите все-таки разобраться с датами!
От: Silver_s Ниоткуда  
Дата: 25.11.02 12:41
Оценка:
Здравствуйте, САС, Вы писали:

САС>Здравствуйте, Blazkowicz, Вы писали:


САС>

B>>А почему не сделать так:

B>>

B>>DateTime dtNew = new DateTime(dtOld.Year, dtOld.Month, dtOld.Day, iNewHours, iNewMinutes, iNewSeconds);

B>>


САС>А как такое решение с точки зрения выделения памяти? Или сборщик мусора все это обработает корректно? Просто этот блок будет выполняться в цикле, а количество итераций совсем не детское В C++ можно было освобождать пямять вручную, и не могу отвыкнуть от этой схемы.


DateTime — выделяется в стеке а не на куче потому что это struct (value type). Если не веришь попробуй присвоить ему null: DateTime dt=null;
Re[5]: Ну помогите все-таки разобраться с датами!
От: Silver_s Ниоткуда  
Дата: 25.11.02 12:48
Оценка:
В C++ можно было освобождать пямять вручную, и не могу отвыкнуть от этой схемы.

SS>DateTime — выделяется в стеке а не на куче потому что это struct (value type). Если не веришь попробуй присвоить ему null: DateTime dt=null;


Наверное не можешь отвыкнуть что new должен создавать объект на куче.
В C# для value типов это просто вызов конструктора.

Эти две строчки эквивалентны:
int i=new int();
int i;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.