c# - 为什么 netcoreapp2.1 和 netcoreapp3.1 的 TimeSpan 值不同?
问题描述
当我从 netcoreapp2.1 转到 netcoreapp3.1 时,我注意到我的一些单元测试失败了。
以下代码有不同的结果:
using System;
namespace ConsoleApp12
{
class Program
{
static void Main(string[] args)
{
var seconds = 0.81960;
var timeSpan = TimeSpan.FromSeconds(seconds);
Console.WriteLine($"seconds:{seconds}");
Console.WriteLine($"timeSpan:{timeSpan}");
Console.WriteLine($"timeSpan.Milliseconds:{timeSpan.Milliseconds}");
Console.WriteLine($"timeSpan.Ticks:{timeSpan.Ticks}");
}
}
}
/*
core 2.1 and Framework 4.8 ROUNDS to nearest ms
seconds:0.8196
timeSpan:00:00:00.8200000
timeSpan.Milliseconds:820
timeSpan.Ticks:8200000
*/
/*
core 3.1 no longer rounds to nearest ms
seconds:0.8196
timeSpan:00:00:00.8196000
timeSpan.Milliseconds:819
timeSpan.Ticks:8196000
*/
这不是显示格式的事情,您可以从刻度的基础值中看出这一点。
为什么它们在 dotnet 核心版本之间有所不同?
解决方案
在 dotnet core 2.1 和 3.1(大约 2019 年底)之间,System.TimeSpan的行为发生了 变化,因此工厂方法不再四舍五入到最接近的 1ms。
这里有一个关于这个的 github 问题。
注意:当前文档尚未更新以反映行为变化,示例代码的输出现在在站点上不正确:System.TimeSpan.FromSeconds。
在 .net core 2.1 和 Net Framework 中,创建的 TimeSpan 舍入到最接近的毫秒数:
FromSeconds TimeSpan
----------- --------
0.001 00:00:00.0010000
0.0015 00:00:00.0020000
12.3456 00:00:12.3460000
123456.7898 1.10:17:36.7900000
1234567898.7654 14288.23:31:38.7650000
1 00:00:01
60 00:01:00
3600 01:00:00
86400 1.00:00:00
1801220.2 20.20:20:20.2000000
在 .net core 3.1 中,它没有四舍五入到最接近的 ms(例如 12.3456):
FromSeconds TimeSpan
----------- --------
0.001 00:00:00.0010000
0.0015 00:00:00.0015000
12.3456 00:00:12.3455999
123456.7898 1.10:17:36.7898000
1234567898.7654 14288.23:31:38.7654000
1 00:00:01
60 00:01:00
3600 01:00:00
86400 1.00:00:00
1801220.2 20.20:20:20.2000000
推荐阅读
- codeception - codeception WebDriver irgnores url 参数
- html - 尝试仅使用 jquery ajax 在 mvc web api 项目中上传图像
- amazon-web-services - 在端点上调用 create_monitoring_schedule 时 Sagemaker 端点无效
- c - 为什么每当我在 VSCode 上运行 mycode 时会出现此“gcc.exe:错误:数组:没有这样的文件或目录”消息?
- sql - sql中行的成对交换
- python - 如何在顶层和子命令之间共享参数
- javascript - React 动态表和嵌套映射
- three.js - 如何从 ThreeJS 中的 BufferGeometry 中获取单击的几何图形的名称属性?
- c - MQTT paho 库中的有效负载是否有限制?
- emacs - 构建包给出:单个文件模板与包名称不匹配