将 Double
格式化为字符串时会进行四舍五入。例如:
Console.WriteLine(12345.6.ToString("F0"));
输出
12346
但是,当DateTime
格式化为字符串时会使用截断。例如:
var ci = CultureInfo.InvariantCulture;
var dateTime = DateTime.Parse("2011-09-14T15:18:42.999", ci);
Console.WriteLine(dateTime.ToString("o", ci));
Console.WriteLine(dateTime.ToString("s", ci));
Console.WriteLine(dateTime.ToString("yyyy-MM-hhThh:mm:ss.f", ci));
输出
2011-09-14T15:18:42.9990000 2011-09-14T15:18:42 2011-09-14T15:18:42.9
这种行为背后的推理(如果有的话)是什么?
将时间舍入到最近的秒可以通过在格式化为字符串之前添加半秒来实现:
var ci = CultureInfo.InvariantCulture;
var dateTime = DateTime.Parse("2010-12-31T23:59:59.999", ci);
Console.WriteLine(dateTime.ToString("s", ci));
var roundedDateTime = dateTime.AddMilliseconds(500);
Console.WriteLine(roundedDateTime.ToString("s", ci));
输出
2010-12-31T23:59:59 2011-01-01T00:00:00