You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取.NET 6中TimeOnly和DateOnly对应DateTime.Now的等效值?

获取当前DateOnly/TimeOnly实例的实现方式

直接通过现有DateTime的对应属性转换即可,实现非常简单:

  • 获取本地当前日期:DateOnly.FromDateTime(DateTime.Now),如果需要UTC时区的当前日期,替换为DateTime.UtcNow即可
  • 获取本地当前时间:TimeOnly.FromDateTime(DateTime.Now),同理UTC时区当前时间替换为DateTime.UtcNow即可

如果高频使用这类写法,你可以自行封装静态属性简化调用,示例如下:

// 封装自定义静态属性
public static class DateOnlyHelper
{
    // 本地日期
    public static DateOnly Today => DateOnly.FromDateTime(DateTime.Now);
    // UTC日期
    public static DateOnly UtcToday => DateOnly.FromDateTime(DateTime.UtcNow);
}

public static class TimeOnlyHelper
{
    // 本地时间
    public static TimeOnly Now => TimeOnly.FromDateTime(DateTime.Now);
    // UTC时间
    public static TimeOnly UtcNow => TimeOnly.FromDateTime(DateTime.UtcNow);
}

// 调用示例
var today = DateOnlyHelper.Today;
var nowTime = TimeOnlyHelper.Now;

官方不内置对应静态属性的原因

这个设计决策在.NET官方的设计文档中有明确说明,核心出发点是规避隐性时区歧义问题:

  1. DateTime.Now、DateTime.Today本身长期存在隐性时区缺陷:默认返回运行设备本地时区的时间,很多开发者容易混淆本地时间和UTC时间,引发时区相关的线上bug
  2. DateOnly和TimeOnly的设计定位是「与时区无关的纯日期/纯时间值」,典型使用场景比如生日、固定营业时间、闹钟设置等,本身不需要绑定时区属性。如果内置Now/Today这类属性,会违背类型的设计初衷,强制给类型附加时区属性
  3. 官方希望开发者显式声明自己需要的时区来源,从API设计层面减少隐性bug的出现概率。

内容的提问来源于stack exchange,提问作者Arad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:30:03