如何比较日期时间的时间部分

本文关键字:时间 时间部 日期 何比较 比较 | 更新日期: 2023-09-27 18:32:12

假设我们有

DateTime t1 = DateTime.Parse("2012/12/12 15:00:00.000");

DateTime t2 = DateTime.Parse("2012/12/12 15:03:00.000");

如何在C#中比较它并说哪个时间是"晚于"?

如何比较日期时间的时间部分

可以使用 TimeOfDay 属性,并对它使用 Compare 。

TimeSpan.Compare(t1.TimeOfDay, t2.TimeOfDay)

根据文档:

-1  if  t1 is shorter than t2.
0   if  t1 is equal to t2.
1   if  t1 is longer than t2.

<<=>>===运算符都直接处理DateTimeTimeSpan对象。所以像这样的东西有效:

DateTime t1 = DateTime.Parse("2012/12/12 15:00:00.000");
DateTime t2 = DateTime.Parse("2012/12/12 15:03:00.000");
if(t1.TimeOfDay > t2.TimeOfDay) {
    //something
}
else {
    //something else
}

使用 DateTime.Compare 方法:

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;
if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";
Console.WriteLine("{0} {1} {2}", date1, relationship, date2);

编辑:如果您只想比较时间,而忽略日期,则可以像其他人建议的那样使用TimeOfDay。如果需要不太细粒度的内容,还可以使用 HourMinute 属性。

请参阅这些示例,这些示例解释了 C# 中的时区转换。

var startTime = new System.TimeSpan(23,0,0);
var endTime = new System.TimeSpan(02,0,0);
var startDateTime = new DateTime(DateTime.UtcNow.Date.Year, DateTime.UtcNow.Date.Month, DateTime.UtcNow.Date.Day, startTime.Hours, startTime.Minutes, startTime.Seconds);
var endDateTime = new DateTime(DateTime.UtcNow.Date.Year, DateTime.UtcNow.Date.Month, DateTime.UtcNow.Date.Day, endTime.Hours, endTime.Minutes, endTime.Seconds);
var cetTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
var startConvertedTime = TimeZoneInfo.ConvertTimeFromUtc(startDateTime, cetTimeZone);
var endConvertedTime = TimeZoneInfo.ConvertTimeFromUtc(endDateTime, cetTimeZone);
Console.WriteLine(startConvertedTime.TimeOfDay);
Console.WriteLine(endConvertedTime.TimeOfDay);
var currentTime = new TimeSpan(03,0,0);
Console.WriteLine(currentTime);
Console.WriteLine(currentTime >= startConvertedTime.TimeOfDay && currentTime <= endConvertedTime.TimeOfDay);