惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
D
Docker
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
月光博客
月光博客
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
MyScale Blog
MyScale Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
L
LangChain Blog
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学

博客园 - WmW

C#学习牛顿迭代法开方 mysql将一个表中指定时间之后的新数据导入到另一个表中 简单搭建一个 ASP.NET Core Web API + Mysql + SqlSugar demo项目 C# 学习研究CRC校验 C# 学习逆变和协变 C# 标准的Dispose模式 C# 返回Task或者Task<T>的方法中如果没有异步方法,就没必要使用async修饰 关于字节序的概念加深 C# 基于ReadOnlySequence和ReadOnlySequenceSegment的简单封装 简单接触BCD码,以及使用C#简单实现BCD转换 C# ReadOnlySequence和ReadOnlySequenceSegment简单使用 C# 非常简单的文字转语音实现 C# 输出年龄和属相列表 C# 封装了一个用来对参数值进行范围限制的泛型方法 C# 为WindowsDefender防火墙已经存在的入站规则添加IP地址 C# 将Framework4.8控制台程序注册为windows服务 C# async void 方法中使用await时外部不会等待 C# Channel学习 C# 使用字符串分割字符串 C# 一个简单的连续心率血氧压缩算法 C# 将日期时间按照ISO 8601标准转成字符串 Dapper传递参数对象时,只支持属性,无法解析字段(出现Parameter '?id' must be defined)
使用具体时间和DateTime.Now运算时需要注意DateTime.Now的毫秒数
WmW · 2026-05-07 · via 博客园 - WmW

DateTime.Now并不是只精确到秒,它后续还有毫秒

这本来是个很简单的知识点,但是有时候一个没注意,就会导致程序的执行超出预期,需要谨慎使用,

比如下面这段代码,理论上count最终应该为0,但是实际运行结果却是128,超出了预期

        public void Start() {
            DateTime dt = new DateTime(2026, 5, 7, 1, 1, 2); //具体的时间,没有毫秒
            DateTime dtNow = new DateTime(2026, 5, 7, 1, 1, 4, 560); //本来是DateTime.Now;此处演示为了方便指定时间
            DateTime et = dtNow.AddSeconds(-4); //获取4秒前的时间点,按照预期理论上应该是2026-5-7 1:1:0,和dt相差2秒
            int count = 256;
            if (dt > et) {
                count -= (int)(dt - et).TotalSeconds * 128; //但是实际上相差1.44秒,再用int一转,就变成1秒了
            }
            Console.WriteLine(count);
        }

如果想要保持预期,就需要将DateTime.Now精确到秒,

        /// <summary>
        /// 将时间精确到秒,忽略秒之后的数值,避免影响计算
        /// </summary>
        public static DateTime RoundSecond(this DateTime dt) {
            return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
        }