C# TimeOfDay TimeOnly的使用区别

 更新时间:2026年01月28日 11:09:33   作者:东百牧码人  
在 C# 中,TimeOfDay和 TimeOnly 类型都用于表示时间,下面就来详细的介绍一下这两者的区别,文中通过示例代码介绍的非常详细,感兴趣的可以了解一下

在 C# 中,TimeOfDay(通常是 DateTime 的属性,返回 TimeSpan 类型)和 TimeOnly 类型都用于表示时间,它们的比较可以通过以下方式实现:

1. 类型转换后比较

由于 TimeOfDay 本质是 TimeSpan,而 TimeOnly 是独立的时间类型,直接比较需要先统一类型:

方法1:将TimeOnly转换为TimeSpan后比较

TimeOnly 提供了 ToTimeSpan() 方法,可转换为 TimeSpan,与 TimeOfDayTimeSpan)直接比较:

DateTime dateTime = DateTime.Now;
TimeSpan timeOfDay = dateTime.TimeOfDay; // 例如:14:30:00(TimeSpan)

TimeOnly timeOnly = new TimeOnly(15, 0, 0); // 15:00:00

// 转换后比较
bool isGreater = timeOfDay > timeOnly.ToTimeSpan(); 
// 结果:true(14:30 < 15:00,所以这里实际是 false,根据具体值判断)

方法2:将TimeSpan转换为TimeOnly后比较

通过 TimeOnly.FromTimeSpan() 方法将 TimeSpan 转换为 TimeOnly,再比较:

DateTime dateTime = DateTime.Now;
TimeSpan timeOfDay = dateTime.TimeOfDay;

TimeOnly timeOnly = new TimeOnly(15, 0, 0);

// 转换后比较
TimeOnly timeFromSpan = TimeOnly.FromTimeSpan(timeOfDay);
bool isLess = timeFromSpan < timeOnly; 
// 结果:true(如果 timeOfDay 是 14:30,则 14:30 < 15:00)

2. 直接比较时间分量

如果需要更细粒度的比较(如小时、分钟),可以分别获取两者的时间分量(时、分、秒)进行比较:

DateTime dateTime = DateTime.Now;
int hourOfDay = dateTime.Hour;
int minuteOfDay = dateTime.Minute;

TimeOnly timeOnly = new TimeOnly(15, 0, 0);

// 比较小时
if (hourOfDay > timeOnly.Hour)
{
// 逻辑...
}
// 小时相等时比较分钟
elseif (hourOfDay == timeOnly.Hour && minuteOfDay > timeOnly.Minute)
{
// 逻辑...
}

总结

  • 推荐通过 类型转换 统一为 TimeSpanTimeOnly 后使用比较运算符(>, <, == 等),简洁且不易出错。

  • TimeOnly

    是 .NET 6+ 引入的专门表示时间的类型,相比 TimeSpan 更语义化,建议优先使用 TimeOnly.FromTimeSpan()TimeOfDay 转换为 TimeOnly 后比较。

到此这篇关于C# TimeOfDay TimeOnly的使用区别的文章就介绍到这了,更多相关C# TimeOfDay TimeOnly内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析C# 使用Process调用外部程序中所遇到的参数问题

    浅析C# 使用Process调用外部程序中所遇到的参数问题

    这篇文章主要介绍了C# 使用Process调用外部程序中所遇到的参数问题,需要的朋友可以参考下
    2017-03-03
  • 利用C#编写Linux守护进程实例代码

    利用C#编写Linux守护进程实例代码

    如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件,下面这篇文章主要给大家介绍了关于利用C#编写Linux守护进程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-01-01
  • C# 使用匿名函数解决EventHandler参数传递的难题

    C# 使用匿名函数解决EventHandler参数传递的难题

    C#动态生成PictureBox并绑定右键菜单,实现删除图片
    2009-05-05
  • C#简单创建和删除目录的方法

    C#简单创建和删除目录的方法

    这篇文章主要介绍了C#简单创建和删除目录的方法,实例分析了C#使用CreateDirectory及Delete方法简单创建及删除目录的相关实现技巧,需要的朋友可以参考下
    2015-08-08
  • C#实现递归算法经典实例

    C#实现递归算法经典实例

    这篇文章主要为大家介绍了C#实现递归算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C#利用File方法对文件的操作总结(字节写入和读取)

    C#利用File方法对文件的操作总结(字节写入和读取)

    使用C#语言中的File类我们能够非常轻松的使用一些文件操作的函数来完成对文件简单的读写操作,这篇文章主要给大家介绍了光宇C#利用File方法对文件的操作的相关资料,包括字节写入和读取,需要的朋友可以参考下
    2021-08-08
  • WinForm自定义控件应用实例

    WinForm自定义控件应用实例

    这篇文章主要介绍了WinForm自定义控件应用实例,非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • C#把DataTable导出为Excel文件

    C#把DataTable导出为Excel文件

    这篇文章介绍了C#把DataTable导出为Excel文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C#实现将超大图片(1GB)裁剪为8张小图片

    C#实现将超大图片(1GB)裁剪为8张小图片

    C#处理超大图片(1GB)需要特别注意内存管理和性能优化,这篇文章为大家整理了4种常见的处理方法,并进行了对比,大家可以根据自己的需要进行选择
    2025-05-05
  • C#适配器模式的使用

    C#适配器模式的使用

    本文主要介绍了C#适配器模式的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论