当前位置: 首页 > news >正文

c# UTC 时间赋值注意事项

文章目录

  • 最佳实践:赋值时指定时区
  • 问题描述
  • 回答
    • 关键区别:DateTime.SpecifyKind 的作用​​
    • 1. 直接赋值 DateTime.UtcNow.Date​​
    • ​​2. 使用 DateTime.SpecifyKind 强制指定​​

最佳实践:赋值时指定时区

避免 C# 版本默认读取时采用 机器时区问题
如果需要UTC 时间,date=DateTime.UtcNow.Date 当下直接使用是足够的。
如果有保存的需要,那么 使用 date=DateTime.SpecifyKind(DateTime.UtcNow.Date, DateTimeKind.Utc); 赋值,再次读取 date.Date 时可以强制保留时区信息。

问题描述

LastRolloverDate = DateTime.SpecifyKind(DateTime.UtcNow.Date, DateTimeKind.Utc);

LastRolloverDate = DateTime.UtcNow.Date;
再下次 读取 LastRolloverDate 时的区别

回答

关键区别:DateTime.SpecifyKind 的作用​​

这两行代码的主要区别在于 ​​DateTime.Kind 属性的设置​​,这会影响后续读取 state.LastRolloverDate 时的行为。

1. 直接赋值 DateTime.UtcNow.Date​​

state.LastRolloverDate = DateTime.UtcNow.Date;

​​DateTime.UtcNow 的 Kind 已经是 DateTimeKind.Utc​​,但 .Date 会返回一个新的 DateTime,其 Kind ​​可能保留也可能丢失​​(取决于 .NET 版本和运行环境)。
在大多数现代 .NET 版本(如 .NET Core 3.1+ / .NET 5+)中,.Date ​​会保留 Kind​​,因此 state.LastRolloverDate.Kind 仍然是 Utc。
但在某些旧版本或特殊情况下(如数据库存储后读取),Kind 可能会变成 Unspecified。
​​读取时的表现​​

var lastRollover = state.LastRolloverDate;
Console.WriteLine(lastRollover.Kind); // 可能是 `Utc` 或 `Unspecified`

​​如果 Kind 是 Utc​​:后续比较或计算时,会被明确视为 UTC 时间。
​​如果 Kind 是 Unspecified​​:可能被误当作本地时间,导致逻辑错误。

​​2. 使用 DateTime.SpecifyKind 强制指定​​

state.LastRolloverDate = DateTime.SpecifyKind(DateTime.UtcNow.Date, DateTimeKind.Utc);

​​显式设置 Kind 为 Utc​​,确保无论 .Date 是否保留 Kind,最终值的 Kind 一定是 Utc。
​​完全避免 Unspecified 的潜在问题​​,适合需要严格 UTC 的场景(如跨时区系统、数据库存储)。
​​读取时的表现​​

var lastRollover = state.LastRolloverDate;
Console.WriteLine(lastRollover.Kind); // 一定是 `Utc

​​
无论后续如何传递或存储​​,只要 Kind 未被手动修改,读取时始终是 Utc。

相关文章:

  • 为什么GOOSE通讯需要MAC地址?
  • 游戏资源传输服务器
  • Android中RelativeLayout相对布局使用详解
  • 数字IC后端实现教程 | Early Clock Flow和Useful skew完全不是一个东西
  • 按键精灵ios脚本新增元素功能助力辅助工具开发(一)
  • 【PyTorch】深度学习实践——第二章:线性模型
  • LVGL输入设备管理
  • Dinky 安装部署并配置提交 Flink Yarn 任务
  • 11. CSS从基础样式到盒模型与形状绘制
  • C++学习之路,从0到精通的征途:继承
  • 基于脑功能连接组和结构连接组的可解释特定模态及交互图卷积网络|文献速递-深度学习医疗AI最新文献
  • 在虚拟机Ubuntu18.04中安装NS2教程及应用
  • 大白话解释联邦学习
  • hadoop3.x单机部署
  • Mysql索引优化
  • Spring Boot之Web服务器的启动流程分析
  • 【android bluetooth 框架分析 02】【Module详解 7】【VendorSpecificEventManager 模块介绍】
  • 使用光标测量,使用 TDR 测量 pH 和 fF
  • AI 模型训练轻量化技术在军事领域的实战应用与技术解析
  • ​​华为云服务器:智能算力网格​
  • 海运港口股掀涨停潮!回应关税下调利好,有货代称美线舱位爆了
  • 孙简任吉林省副省长
  • 字母哥动了离开的心思,他和雄鹿队的缘分早就到了头
  • 港股持续拉升:恒生科技指数盘中涨幅扩大至6%,恒生指数涨3.3%
  • 消费维权周报|上周涉手机投诉较多,涉拍照模糊、屏幕漏液等
  • 减重人生|走过节食弯路,她如何半年减60斤找回自信?