Удалить часы: секунды: миллисекунды в объекте DateTime - PullRequest
14 голосов
/ 11 декабря 2010

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

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

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

Ответы [ 9 ]

12 голосов
/ 11 декабря 2010

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

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

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

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

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

10 голосов
/ 22 февраля 2012
datetime DateWithTimeNoSeconds = 
DateTime.Now.Date.AddHours(DateTime.Now.Hour).AddMinutes(DateTime.Now.Minute);

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

8 голосов
/ 11 декабря 2010
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

7 голосов
/ 07 сентября 2013

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

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

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

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

7 голосов
/ 11 декабря 2010

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

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

4 голосов
/ 30 мая 2018

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

// Get date-only portion of date, without its time.
var date = DateTime.Now.Date;

В приведенном ниже примере свойство Date используется для извлечения компонента даты значения DateTime с его компонентом времени, установленным на ноль (или 0:00:00, или полночь).

* 1009 MSDN *

2 голосов
/ 26 марта 2012

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

1 голос
/ 15 сентября 2014

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

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

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

var dt = DateTime.Parse(DateTime.Now.ToShortDateString());
0 голосов
/ 07 января 2017

Примерно так: дата и время без секунд:

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