Получить только дату без времени от DateTime
я столкнулся с ситуацией, что мне нужно получить только Date из DateTime .
У меня есть свойство DateTime? StartDate ( Nullable ), используемое для хранения значения даты
я попробовал ниже,
var d = Convert.ToDateTime(StartDate).Date;
но он возвращает меня как, например. 6/22/2006 12:00:00AM
после выполнения var d = Convert.ToDateTime(StartDate).Date.ToString(«d»);
Я могу получить d как 6/22/2006 . но я не хочу конвертировать мой DateTime? в String
— это любой способ получить только Date без использования ToString(«d») ?
4 ответа
попробуйте следующее: string x = DateTime.Now.ToShortDateString() .
это получит дату dd/mm/yy, указанную в строке x.
Используйте свойство Дата, чтобы получить компонент Date экземпляра DateTime:
При таком подходе свойство Date вернет дату в полночь. Таким образом, время будет 00:00:00 в этом случае.
Есть несколько альтернативных способов получить только часть Date, но возвращаемый тип будет строкой:
1.) var date=DateTime.Now.ToString(«dd/MM/yyyy»); //Can also use .ToString(«dd-MM-yyyy»);
2.) var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000
Я думаю, вы сомневаетесь, это своего рода. спорный.
Вы запрашиваете дату без времени, но получите DateTime , который имеет оба. Я действительно не думаю, что это должно быть проблемой в большинстве случаев:
Если вы создаете DateTime с определенной датой и сравниваете ее с другой датой, и оба они имеют свое время, установленное в полночь, ваши сравнения будут действительными и правильными. Например:
Сравнение и сортировка будут работать так, как вы ожидаете, и будет выглядеть так:
Другими словами, вы должны быть в полном порядке, просто притворяясь, что часть времени не существует.
Кроме того, когда вы коснулись себя в OP, вы можете использовать свойство Date , если вы хотите избежать любого компонента времени:
A DateTime имеет как дату, так и время. Вы можете сами решить, что в определенной собственности вы никогда не используете дату. Это будет только 12:00 AM , но вы не будете использовать его.
В некоторых ситуациях может быть полезно написать собственный тип, который никогда не может содержать компонент времени в день. Вот начало:
Поле value имеет значение 12 AM, но оно private и не видно извне. Перегрузки ToString() гарантируют, что, если не запрошено другое, Date выписывается с коротким форматом даты текущей культуры.
Get only the Date without Time from DateTime
i came across a situation that, i need to get only the Date out from DateTime .
i am having a DateTime? StartDate property ( Nullable ) used to hold the date value
var d = Convert.ToDateTime(StartDate).Date;
but its returning me d as eg. 6/22/2006 12:00:00AM
after doing var d = Convert.ToDateTime(StartDate).Date.ToString(«d»);
i’m able to get d as 6/22/2006 ..but i dont want to convert my DateTime? to String
is their any way to get only the Date without using the ToString(«d») ?
5 Answers 5
Use the Date property to get the Date component of DateTime instance:
With this approach, Date property will return the date at midnight. So the time part will be 00:00:00 in this case.
There are couple of alternate ways to get the just the Date part, but the return type of it will be a string:
1.) Using .ToString(string? format) where format can be standard or custom format string
2.) Using .ToShortDateString() to return a culture sensitive date string
try this: string x = DateTime.Now.ToShortDateString() .
this will get the date dd/mm/yy given to the string x.
I think you question is sort of. moot.
You ask for a date without a time, but get a DateTime , which has both. I really don’t think that should be a problem in most cases though:
If you create a DateTime with a certain date, and compare it to another date, and both of these have their time set to midnight, your comparisons will be valid and correct. Eg:
Comparing and sorting these will work as you expect, and so will the following:
In other words, you should be perfectly fine just pretending like the time-part does not exist.
Also, as you touched upon yourself in the OP, you can use the property Date if you want to make sure to avoid any time-component:
Как из datetime взять только дату без времени
Для упрощения работы с датами и временем в .NET 6 были добавлены две дополнительные структуры — DateOnly и TimeOnly .
DateOnly
Структура DateOnly представляет дату. Для создания структуры можно использовать ряд ее конструкторов.
При использовании конструктора без параметров структура инициализируется датой 01.01.0001:
Вторая версия конструктора принимает год, месяц и число, которыми инициализируется структура:
Третья версия конструктора в дополнение к году, месяцу и числу, также принимает объект календаря — объект System.Globalization.Calendar , относительно которого будет расcчитываться дата. Класс Calendar является абстрактным, но .NET предоставляет ряд встроенных типов календарей. Например, расcчитаем дату относительно юлианского календаря:
В данном случае для .NET переданная в конструктор дата — 06.01.2022 расценивается как дата юлианского календаря. При выводе на консоль мы видим тот же день только относительно григорианского календаря.
Свойства DateOnly
С помощью свойств структуры можно получить отдельные составляющие даты:
Day : возвращает день даты
DayNumber : возвращает количество прошедших дней с 1 января 0001 года относительно григорианского календаря
DayOfWeek : возвращает день недели
DayOfYear : возвращает день года
MaxValue : возвращает максимально возможную дату (статическое свойство)
MinValue : возвращает самую раннюю возможную дату (статическое свойство)
Month : возвращает месяц
Year : возвращает год
Методы DateOnly
С помощью методов DateOnly можно производить некоторые операции с датами. Некоторые из них:
AddDays(int days) : добавляет к дате некоторое количество дней
AddMonths(int months) : добавляет к дате некоторое количество месяцев
AddYears(int years) : добавляет к дате некоторое количество лет
ToDateTime(TimeOnly) : возвращает объект DateTime , который в качестве даты исппользует текущий объект DateOnly, а в качестве времени — значение параметра в виде TimeOnly
ToLongDateString() : выводит текущий объект DateOnly в виде подробной даты
ToShortDateString() : выводит текущий объект DateOnly в виде сжатой даты
Также в классе есть ряд статических методов. Некоторые из них:
FromDateTime(DateTime dateTime) : на основе значения DateTime, переданного через параметр, создает и возвращает объект DateOnly
FromDayNumber(int days) : на основе количества дней создает и возвращает объект DateOnly
Parse(string date) : конвертирует строковое представление даты в объект DateOnly
ParseExact(string date, string format) : конвертирует строковое представление даты в объект DateOnly, применяя определенный формат
TryParse(String, DateOnly) : конвертирует строковое представление даты в объект DateOnly. При успешной конвертации возвращает true, а параметр типа DateOnly содержит созданную дату
TryParseExact(String, String, DateOnly) : конвертирует строковое представление даты в объект DateOnly, применяя определенный формат. При успешной конвертации возвращает true, а параметр типа DateOnly содержит созданную дату
Пример некоторых операций:
TimeOnly
Структура TimeOnly представляет время в диапазоне от 00:00:00 до 23:59:59.9999999. Для создания структуры можно использовать ряд ее конструкторов.
При использовании конструктора без параметров структура инициализируется временем 0.00:
Дополнительно с помощью других версий конструктора можно установить количество часов, минут, секунд и миллисекунд:
Свойства TimeOnly
С помощью свойств структуры можно получить отдельные составляющие времени:
Hour : возвращает количество часов
Minute : возвращает количество минут
Second : возвращает количество секунд
Millisecond : возвращает количество миллисекунд
Ticks : возвращает количество тиков
MaxValue : возвращает максимально возможное время (статическое свойство)
MinValue : возвращает минимально возможное время (статическое свойство)
Методы TimeOnly
С помощью методов TimeOnly можно производить некоторые операции с временем. Некоторые из них:
AddHours(double hours) : добавляет к времени некоторое количество часов
AddMinutes(double minutes) : добавляет к времени некоторое количество минут
Add(TimeSpan value) : добавляет время из объекта TimeSpan
ToLongTimeString() : выводит текущий объект TimeOnly в виде подробного времени
ToShortTimeString() : выводит текущий объект TimeOnly в виде сжатого времени
Также в классе есть ряд статических методов. Некоторые из них:
FromDateTime(DateTime dateTime) : на основе значения DateTime, переданного через параметр, создает и возвращает объект TimeOnly
FromTimeSpan(TimeSpan value) : на основе объекта TimeSpan создает и возвращает объект TimeOnly
Parse(string time) : конвертирует строковое представление времени в объект TimeOnly
ParseExact(string timee, string format) : конвертирует строковое представление времени в объект TimeOnly, применяя определенный формат
TryParse(string time, TimeOnly result) : конвертирует строковое представление времени в объект TimeOnly. При успешной конвертации возвращает true, а параметр типа TimeOnly содержит сконвертированное время
TryParseExact(string time, string format, TimeOnly result) : конвертирует строковое представление времени в объект TimeOnly, применяя определенный формат. При успешной конвертации возвращает true, а параметр типа TimeOnly содержит сконвертированное время
Работа с датой и временем
В C# есть отличная структура для работы с датами и временем — она называется DateTime. На самом деле это не тип данных, но я включил его в эту главу, потому что вы часто будете работать с датами и/или временем, используя структуру DateTime — иногда так же, как вы работаете со строками и числами.
Начнем, создав новый объект datetime:
Результат получился довольно скучным: 01-01-0001 00:00:00. Он соответствует значению поля DateTime.MinValue. Структура DateTime содержит и более полезные свойства — самым интересным является DateTime.Now:
Это оставляет нас с текущей датой и временем, что часто очень актуально — мы увидим это в некоторых из предстоящих примеров. Однако во многих ситуациях вы, вероятно, хотите представить конкретную дату и время — к счастью для нас, DateTime имеет несколько конструкторов, которые помогут нам в этом. Вот пример:
Порядок параметров в этом конструкторе-Год, месяц, день, поэтому это даст нам объект DateTime с датой, представляющей канун Рождества в 2042 году.
DateTime — с или без времени?
Но что насчет времени? Ну, если Вы не укажите один, он будет по умолчанию 00:00:00, Как вы можете видеть из нашего предыдущего примера. Вы можете легко указать также время, хотя:
Теперь объект типа DateTime имеет время, в данном случае это 18:42. Обратите внимание, что часы должны быть указаны как число от 0 до 23, так как мы используем 24-часовой формат для ввода, но не волнуйтесь, если вы хотите использовать 12-часовой формат с AM/PM — это легко сделать в выводе. Это мы обсудим позже.
Остался вопрос: Что делать, если вас интересует только часть даты? Очевидным ответом было бы использование класса Date вместо класса DateTime, но на самом деле такой вещи не существует. Вместо этого класс DateTime имеет свойство Date:
Как вы видите, однако, свойство Date также является объектом DateTime, где часть со временем была установлена в 00:00:00. Это может быть немного запутанным, но это также имеет довольно хороший смысл, потому что DateTime всегда должен служить просто контейнером, содержащим данные, которые вы можете выводить пользователю во многих отношениях и формах. Мы уже использовали базовый метод ToString(), но есть еще много способов получить выходные данные объекта DateTime.
Вывод DateTime
Получение выходных данных DateTime является одним из наиболее важных аспектов, но это также может быть сложной задачей — это действительно зависит от ваших потребностей. До сих пор мы видели очень простую версию вывода: простой вызов метода ToString (). Он выведет дату и время на основе текущего языка и региональных параметров приложения, которые по умолчанию основаны на системных параметрах. Это означает, что если вы просто вызываете метод tostring (), дата и время будут представлены Пользователю в понятном для них независимо от того, где в мире они находятся, потому что, как вы, наверное, знаете, Формат времени и даты особенно сильно варьируется от региона к региону.
Если вы хотите получить больше контроля над выводом, есть несколько способов сделать это. Самый быстрый способ — использовать один из методов To*, например метод ToShortDateString:
Это выведет короткую версию даты, полностью опуская часть времени. Можно также использовать метод ToLongDateString:
Выходные данные будут отличаться в зависимости от настроек региона, но обычно длинная Дата включает текстовое представление месяца, а не числовое представление.
Если вы хотите получить больше контроля, возможно, потому, что вы хотите адаптировать свою информацию о дате / времени к определенному региону, вы можете использовать одну из перегрузок метода ToString (), например, указав точно, на какой язык / регион вы ориентируетесь:
Класс CultureInfo позволяет получить полный блок информации о языке, например, о том, как они пишут даты и время (класс CultureInfo будет рассмотрен далее в этом учебнике). Затем мы можем передать эту информацию классу DateTime, чтобы он знал, что мы хотим, чтобы визуальное представление даты и времени соответствовало этому языку. Но что, если мы хотим быть еще более конкретными о выходе?
Стандартные Строки Формата Даты & Времени
Чтобы получить еще больший контроль над выводом, можно использовать стандартные строки формата даты и времени, предоставляемые платформой .NET framework. Это одна буква, используемая для отображения даты и / или времени. Для полного списка я предлагаю вам взглянуть на documentationно пока, вот несколько примеров:
Вывод будет таким:
Это дает вам немного больше контроля над выводом, но иногда этого недостаточно — в этих случаях вам нужны строки пользовательского формата.
Пользовательские строки формата Date & Time
Для полного контроля у нас есть строки пользовательского формата. Они представляют собой комбинацию букв и специальных символов, которые вы передаете методу ToString (), чтобы показать формат exact, который вы хотите для своей даты и/или времени — это включает в себя, где вы хотите части даты / времени, как вы хотите их и какие разделители вы хотели бы использовать. Очевидно, что это оставляет вас с большим количеством опций, поэтому для полный список спецификаторов формата, пожалуйста, проверьте documentation, но давайте посмотрим, как это работает прямо сейчас:
Вывод будет подобен этому:
В общем, один или несколько dбудет вам какой-то вариант дня, одного или нескольких M’sдаст вам месяц (строчные mдля минут) и число для y’sдаст вам год. Чтобы полностью понять, что делают эти спецификаторы формата, я все же предлагаю вам взглянуть на documentation, но, надеюсь, приведенный выше пример дал вам хорошее представление о том, насколько мощны строки пользовательского формата.
Разбирая даты
До сих пор мы работали с датами, определенными непосредственно в коде, но вы, вероятно, быстро столкнетесь с ситуацией, когда вам нужно работать с датой, указанной пользователем. Это удивительно сложная тема, потому что есть так много способов написания даты. Платформа .NET framework может помочь вам в этом, поскольку она поддерживает все культуры, как показано в предыдущих примерах, но вам все равно нужно помочь пользователю указать дату в ожидаемом формате. После этого можно использовать метод Parse() для преобразования указанной пользователем строки в объект DateTime, например:
Этот пример на самом деле довольно крут, потому что он показывает, насколько .NET framework может нам помочь, если у нас есть экземпляр класса CultureInfo, который мы хотим использовать (в данном случае английский язык США — и не волнуйтесь, мы обсудим класс CultureInfo более подробно позже). Как только у нас есть это, мы используем его для того, чтобы пользователь знал, какой формат мы ожидаем. Затем мы используем его снова в 4-й строке, чтобы фактически разобрать ввод. В последней строке выведем указанную пользователем дату, на этот раз просто используя Формат, заданный системой.
Однако имейте в виду, что метод Parse() очень строг — если пользователь не введет дату в ожидаемом формате, он выдаст исключение. По этой причине обычно рекомендуется использовать вместо этого метод TryParse() — он делает то же самое, но это позволяет проверить, может ли быть обработана Дата или нет, и это не исключение. Вот пересмотренная версия предыдущего примера:
Резюме
Работа с датами и временем очень важна, но и очень сложна. К счастью для нас, .NET framework помогает нам практически во всех ситуациях с блестящим классом DateTime.