【问题标题】:Set current DateTime seconds and millis to 0 in C# [duplicate]在 C# 中将当前 DateTime 秒和毫秒设置为 0 [重复]
【发布时间】:2020-04-18 08:21:57
【问题描述】:

目前我正在使用这个:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day,
             DateTime.Now.Hour, DateTime.Now.Minute, 0)

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

【问题讨论】:

    标签: c# date datetime


    【解决方案1】:

    您当前的代码很危险,因为您正在多次评估 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);
    

    这还不算太糟糕。另一种选择是:

    DateTime now = DateTime.Now;
    DateTime rounded = now.Date + new TimeSpan(now.Hour, now.Minute, 0);
    

    如果你确实想使用DateTime,并且你肯定想使用系统本地时区,那我可能会这样做。

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

    rounded = now.With(TimeAdjusters.TruncateToMinute);
    

    ...但是首先要考虑您希望now 是什么类型的选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 2018-11-16
      相关资源
      最近更新 更多