Как изменить только часть даты DateTime, сохраняя временную часть?
Я использую много DateTime в своем коде. Я хочу изменить эти DateTimes на мою конкретную дату и сохранить
время.
1. "2012/02/02 06:00:00" => "2015/12/12 : 06:00:00"
2. "2013/02/02 12:00:00" => "2015/12/12 : 12:00:00"
Я использую этот стиль для изменения, но это не очень хороший способ, и я хочу спросить, есть ли способ достичь этой задачи.
DateTime newDateTime = new DateTime(2015,12,12,oldDateTime.Hour,oldDateTime.Minute,0);
Ответы
Ответ 1
С предоставленной вами информацией, я думаю, что этот метод в порядке. Если вы не хотите часто переписывать часть oldDateTime.Hour,oldDateTime.Minute,0
, вы можете создать свой собственный статический класс, чтобы упростить вызовы методов.
В вашем обычном приложении:
class Program
{
static void Main(string[] args)
{
DateTime time = DateTime.Now;
DateTime newDateTime = MyDateTimeUtil.CreateDateFromTime(2015, 12, 12, time);
}
}
Статический класс, создающий значение DateTime
:
public static class MyDateTimeUtil
{
public static DateTime CreateDateFromTime(int year, int month, int day, DateTime time)
{
return new DateTime(year, month, day, time.Hour, time.Minute, 0);
}
}
Ответ 2
Лучший способ сохранения секунд, миллисекунд и меньших частей времени:
DateTime newDateTime = new DateTime(2015,12,12) + oldDateTime.TimeOfDay;
Или вы можете сделать метод расширения для применения новой даты к существующему DateTime и в то же время не доверять новой дате без использования TimeOfDay: -
public static DateTime WithDate (this DateTime datetime, DateTime newDate)
{
return newDate.Date + datetime.TimeOfDay;
}
IMHO DateTime
- одна из самых слабых частей .NET. Например, a TimeSpan
не совпадает с TimeOfDay
и не может представлять "TimePeriod" (в месяцах) - это три отдельные концепции, и их смешивание было плохим выбором. Перемещение на DateTimeOffset
обычно является предпочтительным или отличной библиотекой времени Noda.