Date Time. Date Свойство
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает компоненту даты этого экземпляра.
public: property DateTime Date < DateTime get(); >;
public DateTime Date
member this.Date : DateTime
Public ReadOnly Property Date As DateTime
Значение свойства
Новый объект с такой же датой, как этот экземпляр и значением времени, равным полуночи (00:00:00).
Примеры
В следующем примере свойство используется Date для извлечения компонента даты значения с его компонентом DateTime времени, равным нулю (или 0:00:00, или полночь). В нем также показано, что в зависимости от строки формата, используемой при отображении DateTime значения, компонент времени может по-прежнему отображаться в форматированных выходных данных.
using namespace System; void main() < DateTime^ date1 = gcnew 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(L"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
using System; public class Example < public static void Main() < 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 output like the following output: // 6/1/2008 7:47:00 AM // 6/1/2008 // 6/1/2008 12:00 AM // 06/01/2008 00:00
open System let date1 = DateTime(2008, 6, 1, 7, 47, 0) printfn $"" // Get date-only portion of date, without its time. let dateOnly = date1.Date // Display date using short date string. printfn $"" // Display date using 24-hour clock. printfn $"" printfn $"""""" // The example displays output like the following output: // 6/1/2008 7:47:00 AM // 6/1/2008 // 6/1/2008 12:00 AM // 06/01/2008 00:00
Module Example Public Sub Main() Dim date1 As Date = #6/1/2008 7:47AM# Console.WriteLine(date1.ToString()) ' Get date-only portion of date, without its time. Dim dateOnly As Date = 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")) End Sub End Module ' The example displays output like the following: ' 6/1/2008 7:47:00 AM ' 6/1/2008 ' 6/1/2008 12:00 AM ' 06/01/2008 00:00
Комментарии
Значение свойства возвращаемого DateTime значения совпадает со значением Kind текущего экземпляра .
DateTime Поскольку тип представляет как даты, так и время в одном типе, важно избегать неправильного толкования даты, возвращаемой свойствомDate, как даты и времени.
Использование структур DateOnly и TimeOnly
TimeOnly Структуры DateOnly были представлены в .NET 6 и представляют определенную дату или время дня соответственно. До .NET 6 и всегда в .NET Framework разработчики использовали DateTime тип (или другую альтернативу) для представления одного из следующих вариантов:
- Целый день и время.
- Дата, игнорирующая время.
- Время, игнорирующее дату.
DateOnly и TimeOnly являются типами DateTime , представляющими эти определенные части типа.
DateOnly и TimeOnly типы недоступны в .NET Framework.
Структура DateOnly
Структура DateOnly представляет определенную дату без времени. Поскольку он не имеет компонента времени, он представляет дату с начала дня до конца дня. Эта структура идеально подходит для хранения конкретных дат, таких как дата рождения, дата годовщины или даты, связанные с бизнесом.
Несмотря на то, что вы можете использовать DateTime при игнорировать компонент времени, существует несколько преимуществ использования DateOnly : DateTime
- Структура DateTime может свернуться в предыдущий или следующий день, если это смещение часового пояса. DateOnly не может быть смещение по часовой поясу, и всегда представляет дату, заданную.
- Сериализация DateTime структуры включает компонент времени, который может скрыть намерение данных. Кроме того, DateOnly сериализует меньше данных.
- При взаимодействии кода с базой данных, например SQL Server, все даты обычно хранятся как date тип данных, который не включает время. DateOnly лучше соответствует типу базы данных.
DateOnly имеет диапазон от 0001-01-01 до 9999-12-31, как DateTime и . В конструкторе можно указать определенный DateOnly календарь. DateOnly Однако объект всегда представляет дату в пролептическом григорианском календаре, независимо от того, какой календарь использовался для его создания. Например, можно создать дату из еврейского календаря, но дата преобразуется в григорианский:
var hebrewCalendar = new System.Globalization.HebrewCalendar(); var theDate = new DateOnly(5776, 2, 8, hebrewCalendar); // 8 Cheshvan 5776 Console.WriteLine(theDate); /* This example produces the following output: * * 10/21/2015 */
Dim hebrewCalendar = New System.Globalization.HebrewCalendar() Dim theDate = New DateOnly(5776, 2, 8, hebrewCalendar) ' 8 Cheshvan 5776 Console.WriteLine(theDate) ' This example produces the following output ' ' 10/21/2015
Примеры DateOnly
Используйте следующие примеры, чтобы узнать о DateOnly следующем:
- Преобразование DateTime в DateOnly
- Добавление или вычитание дней, месяцев, лет
- Анализ и форматирование DateOnly
- Сравнение DateOnly
Преобразование DateTime в DateOnly
Используйте статический DateOnly.FromDateTime метод для создания DateOnly типа из DateTime типа, как показано в следующем коде:
var today = DateOnly.FromDateTime(DateTime.Now); Console.WriteLine($"Today is "); /* This example produces output similar to the following: * * Today is 12/28/2022 */
Dim today = DateOnly.FromDateTime(DateTime.Now) Console.WriteLine($"Today is ") ' This example produces output similar to the following ' ' Today is 12/28/2022
Добавление или вычитание дней, месяцев, лет
Существует три метода, используемых для настройки DateOnly структуры: AddDays, AddMonthsи AddYears. Каждый метод принимает целочисленный параметр и увеличивает дату на это измерение. Если указано отрицательное число, дата уменьшается на это измерение. Методы возвращают новый экземпляр DateOnly , так как структура неизменяема.
var theDate = new DateOnly(2015, 10, 21); var nextDay = theDate.AddDays(1); var previousDay = theDate.AddDays(-1); var decadeLater = theDate.AddYears(10); var lastMonth = theDate.AddMonths(-1); Console.WriteLine($"Date: "); Console.WriteLine($" Next day: "); Console.WriteLine($" Previous day: "); Console.WriteLine($" Decade later: "); Console.WriteLine($" Last month: "); /* This example produces the following output: * * Date: 10/21/2015 * Next day: 10/22/2015 * Previous day: 10/20/2015 * Decade later: 10/21/2025 * Last month: 9/21/2015 */
Dim theDate = New DateOnly(2015, 10, 21) Dim nextDay = theDate.AddDays(1) Dim previousDay = theDate.AddDays(-1) Dim decadeLater = theDate.AddYears(10) Dim lastMonth = theDate.AddMonths(-1) Console.WriteLine($"Date: ") Console.WriteLine($" Next day: ") Console.WriteLine($" Previous day: ") Console.WriteLine($" Decade later: ") Console.WriteLine($" Last month: ") ' This example produces the following output ' ' Date: 10/21/2015 ' Next day: 10/22/2015 ' Previous day: 10/20/2015 ' Decade later: 10/21/2025 ' Last month: 9/21/2015
Анализ и форматирование DateOnly
DateOnly можно проанализировать из строки так же, как DateTime и структура. Все стандартные маркеры синтаксического анализа дат .NET работают с DateOnly . При преобразовании DateOnly типа в строку можно использовать стандартные шаблоны форматирования на основе дат .NET. Дополнительные сведения о форматировании строк см. в строках стандартного формата даты и времени.
var theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture); // Custom format var theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture); Console.WriteLine(theDate.ToString("m", CultureInfo.InvariantCulture)); // Month day pattern Console.WriteLine(theDate2.ToString("o", CultureInfo.InvariantCulture)); // ISO 8601 format Console.WriteLine(theDate2.ToLongDateString()); /* This example produces the following output: * * October 21 * 2015-10-21 * Wednesday, October 21, 2015 */
Dim theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture) ' Custom format Dim theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture) Console.WriteLine(theDate.ToString("m", CultureInfo.InvariantCulture)) ' Month day pattern Console.WriteLine(theDate2.ToString("o", CultureInfo.InvariantCulture)) ' ISO 8601 format Console.WriteLine(theDate2.ToLongDateString()) ' This example produces the following output ' ' October 21 ' 2015-10-21 ' Wednesday, October 21, 2015
Сравнение DateOnly
DateOnly можно сравнить с другими экземплярами. Например, можно проверить, является ли дата до или после другой, или если дата сегодня соответствует определенной дате.
var theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture); // Custom format var theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture); var dateLater = theDate.AddMonths(6); var dateBefore = theDate.AddDays(-10); Console.WriteLine($"Consider . "); Console.WriteLine($" Is '' equal? "); Console.WriteLine($" Is after? theDate> "); Console.WriteLine($" Is before? "); Console.WriteLine($" Is after? theDate> "); Console.WriteLine($" Is before? "); /* This example produces the following output: * * Consider 10/21/2015 * Is 'theDate2' equal? True * Is 4/21/2016 after? True * Is 4/21/2016 before? False * Is 10/11/2015 after? False * Is 10/11/2015 before? True */
Dim theDate = DateOnly.ParseExact("21 Oct 2015", "dd MMM yyyy", CultureInfo.InvariantCulture) ' Custom format Dim theDate2 = DateOnly.Parse("October 21, 2015", CultureInfo.InvariantCulture) Dim dateLater = theDate.AddMonths(6) Dim dateBefore = theDate.AddDays(-10) Console.WriteLine($"Consider . ") Console.WriteLine($" Is '' equal? ") Console.WriteLine($" Is after? theDate> ") Console.WriteLine($" Is before? ") Console.WriteLine($" Is after? theDate> ") Console.WriteLine($" Is before? ") ' This example produces the following output ' ' Consider 10/21/2015 ' Is 'theDate2' equal? True ' Is 4/21/2016 after? True ' Is 4/21/2016 before? False ' Is 10/11/2015 after? False ' Is 10/11/2015 before? True
Структура TimeOnly
Структура TimeOnly представляет значение времени дня, например ежедневное будильник или время, когда вы едите обед каждый день. TimeOnly ограничен диапазоном от 00:00:00,0000000 — 23:59:59.9999999999, определенное время дня.
TimeOnly До введения типа программисты обычно используют DateTime тип или TimeSpan тип для представления определенного времени. Однако использование этих структур для имитации времени без даты может привести к некоторым проблемам, которые TimeOnly решают:
- TimeSpan представляет истекшее время, например время, измеряемое с помощью стоп-часов. Верхний диапазон составляет более 29 000 лет, и его значение может быть отрицательным, чтобы указать, что перемещение назад во времени. Отрицательный TimeSpan не указывает определенное время дня.
- Если TimeSpan используется в качестве времени суток, существует риск того, что он может быть манипулировать значением за пределами 24-часового дня. TimeOnly не имеет этого риска. Например, если смена работы сотрудника начинается с 18:00 и длится в течение 8 часов, добавление 8 часов в TimeOnly структуру выполняется до 2:00.
- Использование DateTime в течение дня требует, чтобы произвольные даты были связаны с временем, а затем игнорировались позже. Обычно рекомендуется выбрать DateTime.MinValue (0001-01-01) в качестве даты, однако если часы вычитаются из DateTime значения, OutOfRange может возникнуть исключение. TimeOnly не имеет этой проблемы, так как время откатывается вперед и назад вокруг 24-часового интервала времени.
- Сериализация DateTime структуры включает компонент даты, который может скрыть намерение данных. Кроме того, TimeOnly сериализует меньше данных.
Примеры TimeOnly
Используйте следующие примеры, чтобы узнать о TimeOnly следующем:
- Преобразование DateTime в TimeOnly
- Добавление или вычитание времени
- Анализ и форматирование TimeOnly
- Работа с TimeSpan и DateTime
- Арифметические операторы и сравнение TimeOnly
Преобразование DateTime в TimeOnly
Используйте статический TimeOnly.FromDateTime метод для создания TimeOnly типа из DateTime типа, как показано в следующем коде:
var now = TimeOnly.FromDateTime(DateTime.Now); Console.WriteLine($"It is right now"); /* This example produces output similar to the following: * * It is 2:01 PM right now */
Dim now = TimeOnly.FromDateTime(DateTime.Now) Console.WriteLine($"It is right now") ' This example produces output similar to the following ' ' It is 2:01 PM right now
Добавление или вычитание времени
Существует три метода, используемых для настройки TimeOnly структуры: AddHours, AddMinutesи Add. Оба AddHours параметра и AddMinutes принимает целочисленный параметр и настраивает значение соответствующим образом. Вы можете использовать отрицательное значение для вычитания и положительного значения для добавления. Методы возвращают новый экземпляр TimeOnly , так как структура неизменяема. Метод Add принимает TimeSpan параметр и добавляет или вычитает значение из TimeOnly значения.
Так как TimeOnly представляет собой только 24-часовой период, он выполняет перекат вперед или обратно при добавлении значений, предоставленных этим трем методам. Например, если вы используете значение 01:30:00 для представления 1:30, добавьте -4 часа с этого периода, он откатывается назад 21:30:00 к , что составляет 9:30 вечера. Существуют перегрузки методов для AddHours , AddMinutes и Add это фиксирует количество дней, откатированных.
var theTime = new TimeOnly(7, 23, 11); var hourLater = theTime.AddHours(1); var minutesBefore = theTime.AddMinutes(-12); var secondsAfter = theTime.Add(TimeSpan.FromSeconds(10)); var daysLater = theTime.Add(new TimeSpan(hours: 21, minutes: 200, seconds: 83), out int wrappedDays); var daysBehind = theTime.AddHours(-222, out int wrappedDaysFromHours); Console.WriteLine($"Time: "); Console.WriteLine($" Hours later: "); Console.WriteLine($" Minutes before: "); Console.WriteLine($" Seconds after: "); Console.WriteLine($" is the time, which is days later"); Console.WriteLine($" is the time, which is days prior"); /* This example produces the following output: * * Time: 7:23 AM * Hours later: 8:23 AM * Minutes before: 7:11 AM * Seconds after: 7:23 AM * 7:44 AM is the time, which is 1 days later * 1:23 AM is the time, which is -9 days prior */
Dim wrappedDays As Integer Dim wrappedDaysFromHours As Integer Dim theTime = New TimeOnly(7, 23, 11) Dim hourLater = theTime.AddHours(1) Dim minutesBefore = theTime.AddMinutes(-12) Dim secondsAfter = theTime.Add(TimeSpan.FromSeconds(10)) Dim daysLater = theTime.Add(New TimeSpan(hours:=21, minutes:=200, seconds:=83), wrappedDays) Dim daysBehind = theTime.AddHours(-222, wrappedDaysFromHours) Console.WriteLine($"Time: ") Console.WriteLine($" Hours later: ") Console.WriteLine($" Minutes before: ") Console.WriteLine($" Seconds after: ") Console.WriteLine($" is the time, which is days later") Console.WriteLine($" is the time, which is days prior") ' This example produces the following output ' ' Time: 7:23 AM ' Hours later: 8:23 AM ' Minutes before: 7:11 AM ' Seconds after: 7:23 AM ' 7:44 AM is the time, which is 1 days later ' 1:23 AM is the time, which is -9 days prior
Анализ и форматирование TimeOnly
TimeOnly можно проанализировать из строки так же, как DateTime и структура. Все стандартные маркеры синтаксического анализа на основе времени .NET работают с TimeOnly . При преобразовании TimeOnly типа в строку можно использовать стандартные шаблоны форматирования на основе дат .NET. Дополнительные сведения о форматировании строк см. в строках стандартного формата даты и времени.
var theTime = TimeOnly.ParseExact("5:00 pm", "h:mm tt", CultureInfo.InvariantCulture); // Custom format var theTime2 = TimeOnly.Parse("17:30:25", CultureInfo.InvariantCulture); Console.WriteLine(theTime.ToString("o", CultureInfo.InvariantCulture)); // Round-trip pattern. Console.WriteLine(theTime2.ToString("t", CultureInfo.InvariantCulture)); // Long time format Console.WriteLine(theTime2.ToLongTimeString()); /* This example produces the following output: * * 17:00:00.0000000 * 17:30 * 5:30:25 PM */
Dim theTime = TimeOnly.ParseExact("5:00 pm", "h:mm tt", CultureInfo.InvariantCulture) ' Custom format Dim theTime2 = TimeOnly.Parse("17:30:25", CultureInfo.InvariantCulture) Console.WriteLine(theTime.ToString("o", CultureInfo.InvariantCulture)) ' Round-trip pattern. Console.WriteLine(theTime2.ToString("t", CultureInfo.InvariantCulture)) ' Long time format Console.WriteLine(theTime2.ToLongTimeString()) ' This example produces the following output ' ' 17:00:00.0000000 ' 17:30 ' 5:30:25 PM
Сериализация типов DateOnly и TimeOnly
С помощью .NET 7+поддерживает System.Text.Json сериализацию и десериализацию DateOnly и TimeOnly типы. Рассмотрим следующий объект:
sealed file record Appointment( Guid Id, string Description, DateOnly Date, TimeOnly StartTime, TimeOnly EndTime);
Public NotInheritable Class Appointment Public Property Id As Guid Public Property Description As String Public Property DateValue As DateOnly? Public Property StartTime As TimeOnly? Public Property EndTime As TimeOnly? End Class
В следующем примере сериализуется Appointment объект, отображается результирующий json, а затем десериализирует его обратно в новый экземпляр Appointment типа. Наконец, исходные и недавно десериализированные экземпляры сравниваются для равенства, а результаты записываются в консоль:
Appointment originalAppointment = new( Id: Guid.NewGuid(), Description: "Take dog to veterinarian.", Date: new DateOnly(2002, 1, 13), StartTime: new TimeOnly(5,15), EndTime: new TimeOnly(5, 45)); string serialized = JsonSerializer.Serialize(originalAppointment); Console.WriteLine($"Resulting JSON: "); Appointment deserializedAppointment = JsonSerializer.Deserialize(serialized)!; bool valuesAreTheSame = originalAppointment == deserializedAppointment; Console.WriteLine($""" Original record has the same values as the deserialized record: """);
Dim originalAppointment As New Appointment With < .Id = Guid.NewGuid(), .Description = "Take dog to veterinarian.", .DateValue = New DateOnly(2002, 1, 13), .StartTime = New TimeOnly(5, 3, 1), .EndTime = New TimeOnly(5, 3, 1) >Dim serialized As String = JsonSerializer.Serialize(originalAppointment) Console.WriteLine($"Resulting JSON: ") Dim deserializedAppointment As Appointment = JsonSerializer.Deserialize(Of Appointment)(serialized) Dim valuesAreTheSame As Boolean = (originalAppointment.DateValue = deserializedAppointment.DateValue AndAlso originalAppointment.StartTime = deserializedAppointment.StartTime AndAlso originalAppointment.EndTime = deserializedAppointment.EndTime AndAlso originalAppointment.Id = deserializedAppointment.Id AndAlso originalAppointment.Description = deserializedAppointment.Description) Console.WriteLine( $"Original object has the same values as the deserialized object: ")
В предыдущем коде:
- Объект Appointment создается и назначается переменной appointment .
- Экземпляр appointment сериализуется в JSON с помощью JsonSerializer.Serialize.
- Результирующий json записывается в консоль.
- JSON десериализирован обратно в новый экземпляр Appointment типа с помощью JsonSerializer.Deserialize.
- Исходные и недавно десериализированные экземпляры сравниваются для равенства.
- Результат сравнения записывается в консоль.
Работа с TimeSpan и DateTime
TimeOnly можно создать из и преобразовать в объект TimeSpan. Кроме того, TimeOnly можно использовать для DateTimeсоздания экземпляра или для создания TimeOnly DateTime экземпляра до тех пор, пока указана дата.
Следующий пример создает TimeOnly объект из объекта TimeSpan , а затем преобразует его обратно:
// TimeSpan must in the range of 00:00:00.0000000 to 23:59:59.9999999 var theTime = TimeOnly.FromTimeSpan(new TimeSpan(23, 59, 59)); var theTimeSpan = theTime.ToTimeSpan(); Console.WriteLine($"Variable '' is "); Console.WriteLine($"Variable '' is "); /* This example produces the following output: * * Variable 'theTime' is 11:59 PM * Variable 'theTimeSpan' is 23:59:59 */
' TimeSpan must in the range of 00:00:00.0000000 to 23:59:59.9999999 Dim theTime = TimeOnly.FromTimeSpan(New TimeSpan(23, 59, 59)) Dim theTimeSpan = theTime.ToTimeSpan() Console.WriteLine($"Variable '' is ") Console.WriteLine($"Variable '' is ") ' This example produces the following output ' ' Variable 'theTime' is 11:59 PM ' Variable 'theTimeSpan' is 23:59:59
В следующем примере создается DateTime объект с TimeOnly выбранной произвольной датой:
var theTime = new TimeOnly(11, 25, 46); // 11:25 AM and 46 seconds var theDate = new DateOnly(2015, 10, 21); // October 21, 2015 var theDateTime = theDate.ToDateTime(theTime); var reverseTime = TimeOnly.FromDateTime(theDateTime); Console.WriteLine($"Date only is "); Console.WriteLine($"Time only is "); Console.WriteLine(); Console.WriteLine($"Combined to a DateTime type, the value is "); Console.WriteLine($"Converted back from DateTime, the time is "); /* This example produces the following output: * * Date only is 10/21/2015 * Time only is 11:25 AM * * Combined to a DateTime type, the value is 10/21/2015 11:25:46 AM * Converted back from DateTime, the time is 11:25 AM */
Dim theTime = New TimeOnly(11, 25, 46) ' 11: 25 PM And 46 seconds Dim theDate = New DateOnly(2015, 10, 21) ' October 21, 2015 Dim theDateTime = theDate.ToDateTime(theTime) Dim reverseTime = TimeOnly.FromDateTime(theDateTime) Console.WriteLine($"Date only is ") Console.WriteLine($"Time only is ") Console.WriteLine() Console.WriteLine($"Combined to a DateTime type, the value is ") Console.WriteLine($"Converted back from DateTime, the time is ") ' This example produces the following output ' ' Date only is 10/21/2015 ' Time only is 11:25 AM ' ' Combined to a DateTime type, the value is 10/21/2015 11:25:46 AM ' Converted back from DateTime, the time is 11:25 AM
Арифметические операторы и сравнение TimeOnly
Два TimeOnly экземпляра можно сравнить друг с другом, и можно использовать IsBetween метод для проверки времени между двумя другими. При использовании TimeOnly TimeSpan оператора добавления или вычитания для объекта возвращается значение, представляющее длительность времени.
var start = new TimeOnly(10, 12, 01); // 10:12:01 AM var end = new TimeOnly(14, 00, 53); // 02:00:53 PM var outside = start.AddMinutes(-3); var inside = start.AddMinutes(120); Console.WriteLine($"Time starts at and ends at "); Console.WriteLine($" Is between the start and end? "); Console.WriteLine($" Is between the start and end? "); Console.WriteLine($" Is less than ? "); Console.WriteLine($" Is greater than ? end>"); Console.WriteLine($" Does equal ? "); Console.WriteLine($" The time between and is "); /* This example produces the following output: * * Time starts at 10:12 AM and ends at 2:00 PM * Is 10:09 AM between the start and end? False * Is 12:12 PM between the start and end? True * Is 10:12 AM less than 2:00 PM? True * Is 10:12 AM greater than 2:00 PM? False * Does 10:12 AM equal 2:00 PM? False * The time between 10:12 AM and 2:00 PM is 03:48:52 */
Dim startDate = New TimeOnly(10, 12, 1) ' 10:12:01 AM Dim endDate = New TimeOnly(14, 0, 53) ' 02:00:53 PM Dim outside = startDate.AddMinutes(-3) Dim inside = startDate.AddMinutes(120) Console.WriteLine($"Time starts at and ends at ") Console.WriteLine($" Is between the start and end? ") Console.WriteLine($" Is between the start and end? ") Console.WriteLine($" Is less than ? ") Console.WriteLine($" Is greater than ? endDate>") Console.WriteLine($" Does equal ? ") Console.WriteLine($" The time between and is ") ' This example produces the following output ' ' Time starts at 10:12 AM And ends at 2:00 PM ' Is 10:09 AM between the start And end? False ' Is 12:12 PM between the start And end? True ' Is 10:12 AM less than 2:00 PM? True ' Is 10:12 AM greater than 2:00 PM? False ' Does 10:12 AM equal 2:00 PM? False ' The time between 10:12 AM and 2:00 PM is 03:48:52
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Работа с датами и временем
Для работы с датами и временем в .NET предназначена структура DateTime . Она представляет дату и время от 00:00:00 1 января 0001 года до 23:59:59 31 декабря 9999 года.
Для создания нового объекта DateTime также можно использовать конструктор. Пустой конструктор создает начальную дату:
DateTime dateTime = new DateTime(); Console.WriteLine(dateTime); // 01.01.0001 0:00:00
То есть мы получим минимально возможное значение, которое также можно получить следующим образом:
Console.WriteLine(DateTime.MinValue);
Чтобы задать конкретную дату, нужно использовать один из конструкторов, принимающих параметры:
DateTime date1 = new DateTime(2015, 7, 20); // год - месяц - день Console.WriteLine(date1); // 20.07.2015 0:00:00
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // год - месяц - день - час - минута - секунда Console.WriteLine(date1); // 20.07.2015 18:30:25
Если необходимо получить текущую время и дату, то можно использовать ряд свойств DateTime:
Console.WriteLine(DateTime.Now); Console.WriteLine(DateTime.UtcNow); Console.WriteLine(DateTime.Today);
20.07.2015 11:43:33 20.07.2015 8:43:33 20.07.2015 0:00:00
Свойство DateTime.Now берет текущую дату и время компьютера, DateTime.UtcNow — дата и время относительно времени по Гринвичу (GMT) и DateTime.Today — только текущая дата.
При работе с датами надо учитывать, что по умолчанию для представления дат применяется григорианский календарь. Но что будет, если мы захотим получить день недели для 5 октября 1582 года:
DateTime someDate = new DateTime(1582, 10, 5); Console.WriteLine(someDate.DayOfWeek);
Консоль высветит значение Tuesday, то есть вторник. Однако, как может быть известно из истории, впервые переход с юлианского календаря на григорианский состоялся в октябре 1582 года. Тогда после даты 4 октября (четверг) (еще по юлианскому календарю) сразу перешли к 15 октября (пятница)(уже по григорианскому календарю). Таким образом, фактически выкинули 10 дней. То есть после 4 октября шло 15 октября.
В большинстве случаев данный факт вряд ли как-то повлияет на вычисления, однако при работе с очень давними датами данный аспект следует учитывать.
Операции с DateTime
Основные операции со структурой DateTime связаны со сложением или вычитанием дат. Например, надо к некоторой дате прибавить или, наоборот, отнять несколько дней.
Для добавления дат используется ряд методов:
- Add(TimeSpan value) : добавляет к дате значение TimeSpan
- AddDays(double value) : добавляет к текущей дате несколько дней
- AddHours(double value) : добавляет к текущей дате несколько часов
- AddMinutes(double value) : добавляет к текущей дате несколько минут
- AddMonths(int value) : добавляет к текущей дате несколько месяцев
- AddYears(int value) : добавляет к текущей дате несколько лет
Например, добавим к некоторой дате 3 часа:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 Console.WriteLine(date1.AddHours(3)); // 20.07.2015 21:30:25
Для вычитания дат используется метод Subtract(DateTime date) :
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 DateTime date2 = new DateTime(2015, 7, 20, 15, 30, 25); // 20.07.2015 15:30:25 Console.WriteLine(date1.Subtract(date2)); // 03:00:00
Здесь даты различаются на три часа, поэтому результатом будет дата «03:00:00».
Метод Substract не имеет возможностей для отдельного вычитания дней, часов и так далее. Но это и не надо, так как мы можем передавать в метод AddDays() и другие методы добавления отрицательные значения:
// вычтем три часа DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25 Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25
Кроме операций сложения и вычитания еще есть ряд методов форматирования дат:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); Console.WriteLine(date1.ToLocalTime()); // 20.07.2015 21:30:25 Console.WriteLine(date1.ToUniversalTime()); // 20.07.2015 15:30:25 Console.WriteLine(date1.ToLongDateString()); // 20 июля 2015 г. Console.WriteLine(date1.ToShortDateString()); // 20.07.2015 Console.WriteLine(date1.ToLongTimeString()); // 18:30:25 Console.WriteLine(date1.ToShortTimeString()); // 18:30
Метод ToLocalTime() преобразует время UTC в локальное время, добавляя смещение относительно времени по Гринвичу. Метод ToUniversalTime() , наоборот, преобразует локальное время во время UTC, то есть вычитает смещение относительно времени по Гринвичу. Остальные методы преобразуют дату к определенному формату.
Модуль datetime

Модуль datetime предоставляет классы для обработки времени и даты разными способами. Поддерживается и стандартный способ представления времени, однако больший упор сделан на простоту манипулирования датой, временем и их частями.
Классы, предоставляемые модулем datetime:
Класс datetime.date(year, month, day) — стандартная дата. Атрибуты: year, month, day. Неизменяемый объект.
Класс datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — стандартное время, не зависит от даты. Атрибуты: hour, minute, second, microsecond, tzinfo.
Класс datetime.timedelta — разница между двумя моментами времени, с точностью до микросекунд.
Класс datetime.tzinfo — абстрактный базовый класс для информации о временной зоне (например, для учета часового пояса и / или летнего времени).
Класс datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None) — комбинация даты и времени.
- datetime.MINYEAR (1) ≤ year ≤ datetime.MAXYEAR (9999)
- 1 ≤ month ≤ 12
- 1 ≤ day ≤ количество дней в данном месяце и году
Методы класса datetime:
datetime.today() — объект datetime из текущей даты и времени. Работает также, как и datetime.now() со значением tz=None.
datetime.fromtimestamp(timestamp) — дата из стандартного представления времени.
datetime.fromordinal(ordinal) — дата из числа, представляющего собой количество дней, прошедших с 01.01.1970.
datetime.now(tz=None) — объект datetime из текущей даты и времени.
datetime.combine(date, time) — объект datetime из комбинации объектов date и time.
datetime.strptime(date_string, format) — преобразует строку в datetime (так же, как и функция strptime из модуля time).
datetime.strftime(format) — см. функцию strftime из модуля time.
datetime.date() — объект даты (с отсечением времени).
datetime.time() — объект времени (с отсечением даты).
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) — возвращает новый объект datetime с изменёнными атрибутами.
datetime.timetuple() — возвращает struct_time из datetime.
datetime.toordinal() — количество дней, прошедших с 01.01.1970.
datetime.timestamp() — возвращает время в секундах с начала эпохи.
datetime.weekday() — день недели в виде числа, понедельник — 0, воскресенье — 6.
datetime.isoweekday() — день недели в виде числа, понедельник — 1, воскресенье — 7.
datetime.isocalendar() — кортеж (год в формате ISO, ISO номер недели, ISO день недели).
datetime.isoformat(sep=’T’) — красивая строка вида «YYYY-MM-DDTHH:MM:SS.mmmmmm» или, если microsecond == 0, «YYYY-MM-DDTHH:MM:SS»
datetime.ctime() — см. ctime() из модуля time.
Пример работы с классом datetime:
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте