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 类,但包括时区偏移信息。这种行为使其在处理跨不同时区的日期和时间时更有用。

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

让我们用一个例子来说明

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);

此代码创建了一个表示1小时30分钟的时间间隔的TimeSpan对象。

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,因为从原始日期减去了一小时。

转换时区

您可以使用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

这里isDST变量将保留“true”的值,因为“2023年3月11日”在世界许多地区的夏令时期间。AddHours方法调整日期和时间,同时考虑夏令时。

处理null或未定义的日期

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

让我们举例说明

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

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

比较日期

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

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

这里isAfter变量将评估为“true”,因为date1在date2之前。

格式化日期

您可以使用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属性获取当前日期和时间。然后,我们创建一个代表2023年3月11日的DateTime对象,并将其打印到控制台。接下来,使用AddDays方法向日期添加1天,并使用TimeZoneInfo.ConvertTime方法将其转换为太平洋标准时间。然后,我们使用ToString方法和自定义格式字符串将日期格式化为字符串,并将其打印到控制台。最后,我们使用DateTime.TryParse方法从字符串中解析日期,如果解析操作成功,则将其打印到控制台。

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

set-dates-c-sharp

总结

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

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

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

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

关于作者

本文由Juan Reyes撰写。Juan是一位职业工程师和内心充满梦想的人,他跨越海洋来到日本,追寻机会和挑战的承诺。在东方寻找自己、构建有意义的生活的过程中,Juan从作为企业家、艺术家、奋斗者、父亲形象、丈夫和朋友的经历中汲取智慧,开始撰写关于激情、意义、自我提升、领导力、关系和精神健康的文章。他多年的奋斗和自我发现激励他踏上追求智慧的旅程。