C# 日期类:类型、格式和用法
作者:社区 / 开发者
2023年5月19日
导航至
本文由 Juan Reyes 撰写。向下滚动查看作者简介。
本文中,我们将探讨 C# 日期类以及如何利用它们在应用程序中处理和操作日期数据。我们将看到 C# 处理的不同日期对象类型以及可以表示的格式,并学习如何干净地处理用户提供的日期信息。
让我们直接进入主题。
C# 中有日期对象吗?
是的,C# 有几个日期和时间类,允许您以各种格式处理日期。这些类是 .NET Framework 的一部分,提供了广泛的功能,从基本的日期和时间计算到更高级的操作,如时区转换和夏令时调整。
C# 中有哪些不同的日期类型?
C# 有几个不同的日期类型,包括 DateTime、DateTimeOffset 和 TimeSpan。
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对象、添加或减去时间间隔、转换时区、将日期格式化为字符串以及从字符串中解析日期。
总结
总结来说,您可以使用DateTime和DateTimeOffset类的各种构造函数在C#中设置日期。这些类的参数包括年、月、日、小时、分钟、秒、毫秒和时区偏移量。
此外,您可以对日期执行各种操作,如添加或减去时间间隔、比较日期、格式化日期和从字符串中解析日期。DateTime类提供了许多有用的方法和属性,用于在C#中处理日期和时间。
日期对许多应用程序和程序至关重要,C#提供了强大的工具来处理它们。通过了解不同的日期类、它们的格式、参数和方法,您可以在C#程序中创建强大且可靠的日期和时间功能。
要了解更多关于可以帮助您构建时间序列数据的平台的信息,请查看InfluxDB。
关于作者
本文由Juan Reyes撰写。Juan是一位职业工程师和内心充满梦想的人,他跨越海洋来到日本,追寻机会和挑战的承诺。在东方寻找自己、构建有意义的生活的过程中,Juan从作为企业家、艺术家、奋斗者、父亲形象、丈夫和朋友的经历中汲取智慧,开始撰写关于激情、意义、自我提升、领导力、关系和精神健康的文章。他多年的奋斗和自我发现激励他踏上追求智慧的旅程。