C# TimeOfDay TimeOnly如何比较

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

1. 类型转换后比较

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

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

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

ini 复制代码
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,再比较:

ini 复制代码
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. 直接比较时间分量

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

ini 复制代码
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 后比较。

本文使用 文章同步助手 同步

相关推荐
IT_陈寒30 分钟前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635071 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo2 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林2 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端
feng尘2 小时前
# 彻底搞懂 ReentrantLock 与 tryLock:从秒杀实战到 AQS 独占模式源码剖析
后端
啷里格啷2 小时前
Linux进程管理完全指南:从基础到云原生编排
后端·架构
洛阳泰山2 小时前
AI 应用层被 Python 卷成红海,为什么我偏要用 Java 造一个 RAG + 工作流引擎?
java·人工智能·后端
Wz_z_z_z2 小时前
SpringBoot Actuator 泄露挖掘实战:从 /env 到 heapdump
后端
9i编程2 小时前
工具是编程的铠甲(下篇):从文件对比、全文搜索到数据库设计
后端·openai·ai编程
思考着亮3 小时前
4.Redis 核心概念与实战深度
后端