Удалить часы: секунды: миллисекунды в объекте DateTime

Я пытаюсь создать строку из объекта DateTime, которая дает формат mm:dd:yyyy.

Обычно объект DateTime имеет значение mm:dd:yyyy hrs:min:sec AM/PM.

Есть ли способ быстро удалить часть hrs:min:sec AM/PM DateTime, чтобы при преобразовании ToString() это приведет только к mm:dd:yyyy?

Ответ 1

Чтобы ответить на ваш вопрос, нет - вам придется хранить его другим типом. Самый простой выбор - использовать строку.

string date = dateTime.ToString("MM:dd:yyyy");

Однако я также настоятельно рекомендую не хранить даты внутри вашей программы в виде строк. Это затруднит выполнение каких-либо расчетов или сравнений с ними. Кроме того, я бы посоветовал вам не форсировать определенную культуру для вашего представления даты, поскольку это означает, что ваше приложение, вероятно, не будет работать так, как ожидалось, в других культурах, чем ваше.

Несколько более сложный подход заключается в создании пользовательского класса, который переопределяет ToString. Я бы тоже избегал этого, потому что по-прежнему будет сложно использовать ваш тип со стандартными библиотечными функциями. Вам придется конвертировать туда и обратно все время.

Просто оставьте это как DateTime и сделайте преобразование в строку только на уровне презентации. Вы можете использовать DateTime.ToShortDateString для печати удобной для пользователя строки, соответствующей культуре.

Ответ 2

datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);

Получает текущую дату и дату и добавляет часы и минуты.

Ответ 3

Обычно я использую DateTime.ToShortDateString() для преобразования в стиле Culture -aware в строку.

Таким образом, вы можете отформатировать его до даты только с учетом текущего форматирования культуры, установленной для текущего потока.

Ответ 4

DateTime date1 = new DateTime(2008, 6, 1, 7, 47, 0);
Console.WriteLine(date1.ToString());

// Get date-only portion of date, without its time.
DateTime dateOnly = date1.Date;
// Display date using short date string.
Console.WriteLine(dateOnly.ToString("d"));
// Display date using 24-hour clock.
Console.WriteLine(dateOnly.ToString("g"));
Console.WriteLine(dateOnly.ToString("MM/dd/yyyy HH:mm"));   
// The example displays the following output to the console:
//       6/1/2008 7:47:00 AM
//       6/1/2008
//       6/1/2008 12:00 AM
//       06/01/2008 00:00

http://msdn.microsoft.com/en-us/library/system.datetime.date.aspx

Ответ 5

В то время как в большинстве случаев я согласен с Марком Байерсом, у меня была ситуация, когда мне нужно было хранить дату, которое было только когда-либо зернистым до часа. Хранение минут и секунд было бы не только лишним, но и неточным. Пользователь просто выбрал дату и час, поэтому, когда дата и час будут выбраны пользователем, минуты и секунды будут установлены на любое текущее время.

Удаление минут и секунд в этом случае очень просто. Вот код:

scheduledDate = scheduledDate.AddMinutes(
    scheduledDate.Minute * -1).AddSeconds(
    scheduledDate.Second * -1);

Затем я храню его в БД как полное время, с минут и секунд всегда 0.

Ответ 6

О DateTime.AddMinutes (или секундах или часах), если вы хотите УДАЛИТЬ вместо добавления только добавить отрицательное число!

Ответ 7

Простой способ, возможно, не самый лучший, но

DateTime dt = new DateTime();
        dt = DateTime.Now;
        string sdate = dt.ToShortDateString();
        dt = DateTime.Parse(sdate);

Или для краткости

DateTime DateTimeWithOut_HoursMinutesSecondsEct = DateTime.Parse(DateTime.Now.ToShortDateString());

Ответ 8

Что-то вроде этого для даты и времени без секунд:

private DateTime _startTime;
public DateTime StartTime 
{ 
    get { return _startTime; } 
    set 
    { 
        _startTime = value.AddSeconds(-value.Second)
                          .AddMilliseconds(-value.Millisecond);   
    }
}