Как изменить время в DateTime? - PullRequest
       129

Как изменить время в DateTime?

315 голосов
/ 07 декабря 2009

Как я могу изменить только время в моей DateTime переменной "s"?

DateTime s = some datetime;

Ответы [ 27 ]

3 голосов
/ 08 апреля 2016

Добавление. Дата к вашей дате устанавливает ее на полночь (00:00).

MyDate.Date

Примечание Эквивалентный SQL равен CONVERT(DATETIME, CONVERT(DATE, @MyDate))

Что делает этот метод настолько хорошим, что он быстро набирается и легко читается. Бонус в том, что нет конвертации из строк.

т.е. Чтобы установить сегодняшнюю дату на 23:30, используйте:

DateTime.Now.Date.AddHours(23).AddMinutes(30)

Конечно, вы можете заменить DateTime.Now или MyDate на любую дату по вашему выбору.

3 голосов
/ 06 февраля 2014

Если у вас DateTime, например 2014/02/05 18:19:51, и вы хотите просто 2014/02/05, вы можете сделать это:

_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
2 голосов
/ 20 декабря 2012
int year = 2012;
int month = 12;
int day = 24;
int hour = 0;
int min = 0;
int second = 23;
DateTime dt = new DateTime(year, month, day, hour, min, second);
2 голосов
/ 05 января 2017

Поскольку DateTime является неизменным, новый экземпляр должен быть создан, когда необходимо изменить компонент даты. К сожалению, нет встроенной функциональности для установки отдельных компонентов экземпляра DateTime.

Использование следующих методов расширения

public static DateTime SetPart(this DateTime dateTime, int? year, int? month, int? day, int? hour, int? minute, int? second)
{
    return new DateTime(
        year ?? dateTime.Year,
        month ?? dateTime.Month,
        day ?? dateTime.Day,
        hour ?? dateTime.Hour,
        minute ?? dateTime.Minute,
        second ?? dateTime.Second
    );
}

public static DateTime SetYear(this DateTime dateTime, int year)
{
    return dateTime.SetPart(year, null, null, null, null, null);
}

public static DateTime SetMonth(this DateTime dateTime, int month)
{
    return dateTime.SetPart(null, month, null, null, null, null);
}

public static DateTime SetDay(this DateTime dateTime, int day)
{
    return dateTime.SetPart(null, null, day, null, null, null);
}

public static DateTime SetHour(this DateTime dateTime, int hour)
{
    return dateTime.SetPart(null, null, null, hour, null, null);
}

public static DateTime SetMinute(this DateTime dateTime, int minute)
{
    return dateTime.SetPart(null, null, null, null, minute, null);
}

public static DateTime SetSecond(this DateTime dateTime, int second)
{
    return dateTime.SetPart(null, null, null, null, null, second);
}

Вы можете установить отдельные DateTime компоненты, такие как

var now = DateTime.Now;

now.SetSecond(0);
2 голосов
/ 17 января 2017

Используйте Date.Add и добавьте New TimeSpan с новым временем, которое вы хотите добавить

DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))
1 голос
/ 13 июля 2011
//The fastest way to copy time            

DateTime justDate = new DateTime(2011, 1, 1); // 1/1/2011 12:00:00AM the date you will be adding time to, time ticks = 0
DateTime timeSource = new DateTime(1999, 2, 4, 10, 15, 30); // 2/4/1999 10:15:30AM - time tick = x

justDate = new DateTime(justDate.Date.Ticks + timeSource.TimeOfDay.Ticks);

Console.WriteLine(justDate); // 1/1/2011 10:15:30AM
Console.Read();
1 голос
/ 04 апреля 2011

Я только что наткнулся на это сообщение, потому что у меня была похожая проблема, из-за которой я хотел установить время для объекта Entity Framework в MVC, который получает дату из представления (datepicker), поэтому компонент времени равен 00:00:00. но мне нужно, чтобы это было текущее время. На основании ответов в этом посте я придумал:

myEntity.FromDate += DateTime.Now.TimeOfDay;
1 голос
/ 07 декабря 2009

Вот метод, который вы могли бы использовать, чтобы сделать это для вас, используйте его вот так

DateTime newDataTime = ChangeDateTimePart(oldDateTime, DateTimePart.Seconds, 0);

Вот метод, возможно, есть лучший способ, но я только что его взбил:

public enum DateTimePart { Years, Months, Days, Hours, Minutes, Seconds };
public DateTime ChangeDateTimePart(DateTime dt, DateTimePart part, int newValue)
{
    return new DateTime(
        part == DateTimePart.Years ? newValue : dt.Year,
        part == DateTimePart.Months ? newValue : dt.Month,
        part == DateTimePart.Days ? newValue : dt.Day,
        part == DateTimePart.Hours ? newValue : dt.Hour,
        part == DateTimePart.Minutes ? newValue : dt.Minute,
        part == DateTimePart.Seconds ? newValue : dt.Second
        );
}
0 голосов
/ 07 декабря 2009

Что не так с методом DateTime.AddSeconds, где вы можете добавлять или вычитать секунды?

0 голосов
/ 16 августа 2017

Попробуйте это

var NewDate = Convert.ToDateTime(DateTime.Now.ToString("dd/MMM/yyyy")+" "+"10:15 PM")/*Add your time here*/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...