在 C# 中将当前 DateTime 秒和毫秒设置为 0

svv*_*vvc 0 c# datetime date

目前我正在使用这个:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
             DateTime.Now.Hour, DateTime.Now.Minute, 0)
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以直接将秒和毫秒设置为 0。

Jon*_*eet 5

您当前的代码很危险,因为您要进行DateTime.Now多次评估。当前时间可能会在两次调用之间发生变化,因此您最终可能会得到不一致的值。最好是:

// Do you *definitely* want the current date/time in the system  local time zone?
// Might be correct for local client apps; almost certainly not for server-side code.
DateTime now = DateTime.Now;
DateTime rounded = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0);
Run Code Online (Sandbox Code Playgroud)

这还不错。另一种选择是:

DateTime now = DateTime.Now;
DateTime rounded = now.Date + new TimeSpan(now.Hour, now.Minute, 0);
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用DateTime,并且您肯定想使用系统本地时区,那可能就是我要做的。

作为我的Noda Time项目的插件,它类似于:

rounded = now.With(TimeAdjusters.TruncateToMinute);
Run Code Online (Sandbox Code Playgroud)

......但是你有更多的选择来考虑你首先想要now成为什么类型。