DateTime конвертировать в Date, а затем обратно в DateTime в C # - PullRequest
4 голосов
/ 05 марта 2010

Я использую это для преобразования значения DateTime в Date, а затем добавляю 00:00:00 и 23:59:59, чтобы при подсчете вещей учитывался целый день. Я уверен, что это неправильный способ делать вещи. Что было бы правильным путем?

        DateTime varObliczOd = DateTime.Parse(dateTimeWycenaPortfelaObliczDataOd.Value.ToShortDateString() + " 00:00:00");
        DateTime varObliczDo = DateTime.Parse(dateTimeWycenaPortfelaObliczDataDo.Value.ToShortDateString() + " 23:59:59");

Ответы [ 8 ]

11 голосов
/ 05 марта 2010

, если dateTimeWycenaPortfelaObliczDataOd имеет тип DateTime, Вы можете использовать:

dateTimeWycenaPortfelaObliczDataOd.Date

, чтобы получить только часть даты (время будет 00:00:00 ...).Если вы хотите получить последний тик даты, вы можете использовать:

dateTimeWycenaPortfelaObliczDataOd.Date.AddDays(1).AddTicks(-1)

, но вам действительно лучше работать со следующей датой (.AddDays (1)).

Inв любом случае нет необходимости преобразовывать в строку и обратно в DateTime.

5 голосов
/ 05 марта 2010

DateTime объекты имеют свойство Date , которое может быть тем, что вам нужно.

2 голосов
/ 05 марта 2010

Было бы полезно узнать, зачем вам это нужно, но это сработает.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Date;
DateTime varObliczDo = varObliczOd.AddDays(1).AddSeconds(-1);

Использование атрибута Date с последующим непосредственным манипулированием ими для создания необходимого компонента времени - не нужно беспокоиться о разборе и преобразовании.

2 голосов
/ 05 марта 2010

Для получения значений можно использовать следующие свойства / методы для объекта DateTime:

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Date;
DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataOd.AddDayes(1).AddTicks(-1);
1 голос
/ 05 марта 2010

Вы можете использовать свойство Date объекта DateTime, чтобы выполнить то, что вам нужно.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.Value.Date;
DateTime varObliczDo = dateTimeWycenaPortfelaObliczDataDo.Value.Date.AddDays(1);

Если вы действительно хотите, чтобы оно заканчивалось в 23:59:59, вы можете сделать:*

Устанавливает varObliczDo в качестве конечной даты без времени плюс один день (в полночь).Так что если бы dateTimeWycenaPortfelaObliczDataDo было 2010-03-05 16:12:12, то теперь было бы 2010-03-06 00:00:00.

0 голосов
/ 05 марта 2010

Вы можете работать с TimeSpan:

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd - new TimeSpan(dateTimeWycenaPortfelaObliczDataOd.Hours, dateTimeWycenaPortfelaObliczDataOd.Minutes, dateTimeWycenaPortfelaObliczDataOd.Seconds);

Таким образом, вы избегаете хотя бы синтаксического анализа, который может завершиться ошибкой в ​​зависимости от настроек локальной культуры.

0 голосов
/ 05 марта 2010

DateTime newDate = new DateTime (oldDate.Year, oldDate.Month, oldDate.Day, 23, 59,59) DateTime newDate = new DateTime (oldDate.Year, oldDate.Month, oldDate.Day, 0, 0, 0)

0 голосов
/ 05 марта 2010

Нечто подобное может быть?Я набрал это из головы, возможно, в коде есть некоторые ошибки.

DateTime varObliczOd = dateTimeWycenaPortfelaObliczDataOd.AddSeconds(-dateTimeWycenaPortfelaObliczDataOd.Seconds).AddMinutes(-dateTimeWycenaPortfelaObliczDataOd.Minutes).AddHours(-dateTimeWycenaPortfelaObliczDataOd.Hours);

DateTime varObliczDo  = new DateTime(dateTimeWycenaPortfelaObliczDataDo.Year, dateTimeWycenaPortfelaObliczDataDo.Month, dateTimeWycenaPortfelaObliczDataDoDay, 23, 59, 59);
...