【问题标题】:What is the best way to get rid of milliseconds from DateTime?从 DateTime 中摆脱毫秒的最佳方法是什么?
【发布时间】:2021-06-30 17:21:33
【问题描述】:

当我从数据库中获取 DateTime 时,它​​会返回 2021-06-23T12:30:40.1234564z 但我想要的是2021-06-23T12:30:40z。在这里摆脱毫秒的最佳方法是什么?谢谢。

【问题讨论】:

  • 使用格式化程序没有oput毫秒
  • @ΦXocę웃Пepeúpaツ:这将返回一个字符串,而不是修改原始日期时间。我在过去几次需要后者(例如,将一个值与存储在毫秒丢失的地方的值进行比较时:WebForms ViewState 或某些数据库系统)。或this OLEDB bug.

标签: c#


【解决方案1】:

我个人使用这个:

dt = dt.Subtract(new TimeSpan(0, 0, 0, 0, dt.Millisecond));

它比可以使用的 Ticks-Modulo-Trickery 稍微冗长一些,但我喜欢它的可读性:代码的作用一目了然。


正如 JonSkeet 在 cmets 中所建议的那样,这更紧凑且同样可读:

dt = dt.AddMilliseconds(-dt.Millisecond);

我比我的解决方案更喜欢它,因为在我的解决方案中,通过忘记 0 参数之一很容易引入难以发现的错误。

【讨论】:

  • 稍微简单一点:dt = dt.AddMilliseconds(-dt.Millisecond)
  • @JonSkeet:好点。由于您没有自己编写,因此我冒昧地将其添加到我的答案中。
【解决方案2】:
var date = DateTime.Now;
date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Kind);

【讨论】:

    【解决方案3】:

    作为@jonskeet 答案的补充,您还可以舍入

    if(dt.millis>500) dt = dt.AddMilliseconds(1000)
    dt = dt.AddMilliseconds(-dt.millis);
    

    【讨论】:

      【解决方案4】:
      DateTime dt = new DateTime();
      dt = Convert.ToDateTime("2021 - 06 - 23T12: 30:40z");
      
      var ss = dt.ToString("yyyy-MM-dd hh:mm:ss");
      

      【讨论】:

      • 这里缺少中间的“T”和末尾的“Z”,“hh”是 12 小时制,而“HH”是 24 小时制。此外,您可能需要在调用.ToString(...) 之前调用.ToUniversalTime(),以确保在格式化之前它实际上是通用时间。
      • @Llama 感谢您的建议。根据您的建议,我的代码用户可以决定。快乐编码。
      • 好的,但是您的“建议”不是 OP 要求的。 OP 说:“但我想要的是 2021-06-23T12:30:40z。” - 你的解决方案会产生这种格式吗?
      【解决方案5】:

      dt.ToString("YYYY/MM/DD");

      【讨论】:

      • YYYYDD 在 .NET 中不存在用于格式化日期时间值,即使它们存在,也缺少小时、分钟和秒。
      猜你喜欢
      • 2011-07-05
      • 2016-01-08
      • 1970-01-01
      • 2010-10-02
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 2010-10-28
      相关资源
      最近更新 更多