C# 日期类:类型、格式以及如何使用它们

导航至

本文由 Juan Reyes 撰写。向下滚动查看作者的简介。

c-sharp-date-classes

在本文中,我们将探讨 C# 日期类以及如何利用它们来处理和操作应用程序中的日期数据。我们将了解 C# 处理的不同类型的日期对象和可以表示的格式,并且我们将学习如何简洁地处理来自用户的日期信息。

让我们直接开始吧。

C# 中有日期对象吗?

是的,C# 有几个日期和时间类,允许您以各种格式处理日期。这些类是 .NET Framework 的一部分,并提供广泛的功能,从基本的日期和时间计算到更高级的操作,例如时区转换和夏令时调整。

C# 中有哪些不同的日期类型?

C# 有几种不同的日期类型,包括 DateTime、DateTimeOffset 和 TimeSpan。

c-sharp-properties

DateTime

DateTime 类是 C# 中最常用的日期类。它表示特定的日期和时间,并具有许多属性和方法,允许您对其执行操作。可以使用各种构造函数创建 DateTime 对象,这些构造函数接受诸如年、月、日、小时、分钟、秒和毫秒之类的参数。

这是一个示例

DateTime date1 = new DateTime(2023, 3, 11, 10, 30, 0);

此代码创建一个 DateTime 对象,表示 2023 年 3 月 11 日上午 10:30。

DateTime 类还提供了以不同方式格式化日期的各种方法。例如,ToString 方法可以将 DateTime 对象格式化为字符串。以下代码以“dd MMM yyyy”格式(例如,“11 Mar 2023”)格式化日期

string formattedDate = date1.ToString("dd MMM yyyy");

DateTimeOffset

DateTimeOffset 类类似于 DateTime 类,但包含有关时区偏移的信息。此行为使其在跨不同时区处理日期和时间时更有用。

可以使用与 DateTime 对象相同的构造函数创建 DateTimeOffset 对象,但也需要时区偏移。

让我们用一个例子来说明

DateTimeOffset date2 = new DateTimeOffset(2023, 3, 11, 10, 30, 0, TimeSpan.FromHours(-5));

在这里,我们创建一个 DateTimeOffset 对象,表示 2023 年 3 月 11 日上午 10:30,时区偏移为 -5 小时(例如,东部标准时间)。

TimeSpan

TimeSpan 类表示时间段,而不是特定的日期和时间。它可以执行涉及日期和时间的计算,例如从 DateTime 对象添加或减去时间间隔。可以使用各种构造函数创建 TimeSpan 对象,这些构造函数接受诸如小时、分钟、秒和毫秒之类的参数。

这是一个简单的例子

TimeSpan duration = new TimeSpan(1, 30, 0);

此代码创建一个 TimeSpan 对象,表示 1 小时 30 分钟。

在 C# 中使用日期

根据您的具体需求,在 C# 中使用日期有很多方法。以下是一些常见示例

获取当前日期和时间

您可以使用 DateTime.Now 属性获取当前日期和时间。此属性返回一个 DateTime 对象,表示本地时区的当前日期和时间。类似于以下内容

DateTime currentDateTime = DateTime.Now;

获取当前日期

现在,如果您只需要当前日期(不包括时间),则可以使用 DateTime.Today 属性。此属性将返回一个 DateTime 对象,表示当前日期(时间为午夜)。

DateTime currentDate = DateTime.Today;

从日期添加或减去时间间隔

使用 Add 和 Subtract 方法,您可以从 DateTime 对象添加或减去时间间隔(例如,天、小时或分钟)。这是一个将一天添加到 DateTime 对象的示例

DateTime date = new DateTime(2023, 3, 11); 
DateTime newDate = date.AddDays(1);

此简单代码将 newDate 变量设置为 2023 年 3 月 12 日,因为原始日期已添加一天。同样,您可以使用 Subtract 方法减去时间间隔,如下所示

DateTime date = new DateTime(2023, 3, 11, 10, 30, 0);
DateTime newDate = date.Subtract(new TimeSpan(1, 0, 0));

在这里,我们将 newDate 变量设置为 2023 年 3 月 11 日上午 9:30,因为原始日期已减去 1 小时。

转换时区

您可以使用 TimeZoneInfo.ConvertTime 方法将 DateTime 对象从一个时区转换为另一个时区。

这是一个简单的例子

DateTime date = new DateTime(2023, 3, 11, 10, 30, 0); 
TimeZoneInfo sourceTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
DateTime newDate = TimeZoneInfo.ConvertTime(date, sourceTimeZone, targetTimeZone);

此代码片段将日期从东部标准时间转换为太平洋标准时间,并将 newDate 变量设置为 2023 年 3 月 11 日上午 7:30。

处理夏令时

DateTime 类提供了用于处理夏令时 (DST) 的方法和属性,例如 IsDaylightSavingTime 属性以及 AddHours 和 AddDays 方法。

DateTime date = new DateTime(2023, 3, 11, 10, 30, 0); 
bool isDST = date.IsDaylightSavingTime(); // true 
DateTime newDate = date.AddHours(1); // adjusts for DST

由于“2023 年 3 月 11 日”在世界许多地方都是夏令时,因此 isDST 变量将保存值“true”。 AddHours 方法将日期和时间调整 1 小时,同时考虑夏令时。

处理 null 或未定义的日期

在某些情况下,您可能会在 C# 代码中遇到 null 或未定义的日期。为了处理这些情况,您可以使用可为空的类型或 DateTime.MinValue 值。

让我们说明一下

DateTime? date = null;
if (date == null || date == DateTime.MinValue) 
{
    // handle null or undefined date
}

此代码段检查 date 变量是否为 null 或等于 DateTime.MinValue,并相应地处理该情况。

比较日期

比较两个日期对象时,可以使用以下比较运算符(>、<、>=、<=、==、!=)或 CompareTo 方法。

DateTime date1 = new DateTime(2023, 3, 11); 
DateTime date2 = new DateTime(2023, 3, 12);
bool isAfter = date1  date2; // true

由于 date1 在 date2 之前,因此 isAfter 变量将评估为“true”。

格式化日期

您可以使用 ToString 方法和格式字符串将 DateTime 对象格式化为字符串。根据所需的输出,有许多格式字符串可供选择。

以下是一些示例

DateTime date = new DateTime(2023, 3, 11, 10, 30, 0); 
string formattedDate1 = date.ToString("d"); // "3/11/2023" 
string formattedDate2 = date.ToString("D"); // "Saturday, March 11, 2023" 
string formattedDate3 = date.ToString("t"); // "10:30 AM"
string formattedDate4 = date.ToString("T"); // "10:30:00 AM"

这些格式字符串产生不同的输出格式。例如,“d”格式字符串生成短日期格式,而“D”格式字符串生成长日期格式,“t”格式字符串生成短时间格式,而“T”格式字符串生成长时间格式。

解析日期

最后,您可以使用 DateTime.Parse 或 DateTime.TryParse 方法将字符串解析为 DateTime 对象。

string dateString = "2023-03-11"; 

DateTime date = DateTime.Parse(dateString);
DateTime parsedDate;

if (DateTime.TryParse(dateString, out parsedDate)) 
{ 
    Console.WriteLine("Parsed date: " + parsedDate.ToString()); 
} 
else 
{ 
    Console.WriteLine("Could not parse date: " + dateString); 
}

此代码基于字符串“2023-03-11”创建一个表示 2023 年 3 月 11 日的 DateTime 对象。如果无法将字符串解析为有效的 DateTime,Parse 方法将抛出异常。如果无法解析字符串,TryParse 方法将返回 false,而不会抛出异常。

这是一个示例,演示了我们在本文中讨论的几个概念

using System;

namespace DateExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // get the current date and time
            DateTime now = DateTime.Now;
            Console.WriteLine("Current date and time: " + now.ToString());

            // create a DateTime object for March 11, 2023
            DateTime date = new DateTime(2023, 3, 11, 10, 30, 0);
            Console.WriteLine("Original date: " + date.ToString());

            // add 1 day to the date
            date = date.AddDays(1);
            Console.WriteLine("New date: " + date.ToString());

            // convert the date to Pacific Standard Time
            TimeZoneInfo sourceTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
            TimeZoneInfo targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
            DateTime newDate = TimeZoneInfo.ConvertTime(date, sourceTimeZone, targetTimeZone);
            Console.WriteLine("Converted date: " + newDate.ToString());

            // format the date as a string
            string formattedDate = newDate.ToString("MMMM dd, yyyy h:mm tt");
            Console.WriteLine("Formatted date: " + formattedDate);

            // parse a date from a string
            string dateString = "2023-03-13";
            DateTime parsedDate;
            if (DateTime.TryParse(dateString, out parsedDate))
            {
                Console.WriteLine("Parsed date: " + parsedDate.ToString());
            }
            else
            {
                Console.WriteLine("Could not parse date: " + dateString);
            }
        }
    }
}

我们首先使用 DateTime.Now 属性获取当前日期和时间。然后,我们创建一个 DateTime 对象,表示 2023 年 3 月 11 日,并将其打印到控制台。接下来,使用 AddDays 方法将日期添加 1 天,并使用 TimeZoneInfo.ConvertTime 方法将其转换为太平洋标准时间。然后,我们使用 ToString 方法和自定义格式字符串将日期格式化为字符串,并将其打印到控制台。最后,我们使用 DateTime.TryParse 方法从字符串解析日期,并在解析操作成功时将其打印到控制台。

此示例演示了我们在本文中讨论的几个概念,包括创建 DateTime 对象、添加或减去时间间隔、转换时区、将日期格式化为字符串以及从字符串解析日期。

set-dates-c-sharp

总结

总而言之,您可以使用 DateTime 和 DateTimeOffset 类的各种构造函数在 C# 中设置日期。这些类的参数包括年、月、日、小时、分钟、秒、毫秒和时区偏移。

此外,您可以对日期执行各种操作,例如添加或减去时间间隔、比较日期、格式化日期以及从字符串解析日期。 DateTime 类提供了许多有用的方法和属性,用于在 C# 中处理日期和时间。

日期对于许多应用程序和程序至关重要,C# 提供了强大的工具来处理它们。通过了解不同的日期类、它们的格式、参数和方法,您可以在 C# 程序中创建强大而可靠的日期和时间功能。

要了解有关可以帮助您构建时间序列数据的平台的更多信息,请查看InfluxDB

关于作者

这篇文章由 Juan Reyes 撰写。Juan 是一位工程师,也是一位梦想家,他跨越重洋来到日本,追寻机遇和挑战的承诺。在努力寻找自我并在东方建立有意义的生活的同时,Juan 从他作为企业家、艺术家、奋斗者、父亲形象、丈夫和朋友的经历中汲取智慧,开始撰写关于激情、意义、自我发展、领导力、人际关系和心理健康的文章。他多年的奋斗和自我发现激励了他,并驱使他踏上智慧之旅。