【问题标题】:How to return long after Date Subtract?日期减法后如何返回很长时间?
【发布时间】:2020-02-21 07:43:50
【问题描述】:
DateTime dtLastUse = date1.Subtract(date2);     
Long lSubtract = dtLastUse.Ticks;

我得到的结果:

我的结果返回类似{ 14433.14:02:30 }

如何只回复我14434

【问题讨论】:

  • 该代码无法编译,因为DateTime.Subtract(DateTime) 返回一个TimeSpan(我假设date1date2 都是date2 类型)-并且没有内置-在名为Long 的类型中。也不清楚你想要的结果是什么——天的差异?小时?分钟?蜱虫?还有什么?请提供minimal reproducible example 以提供更多详细信息。

标签: c# datetime long-integer


【解决方案1】:

从另一个日期减去一个日期的结果是TimeSpan。这是为了防止您遇到这种混乱。如果要获取总天数,请使用TotalDays。您可以按照您想要的方式对该值进行四舍五入(例如,如果您想要 complete 天数,请使用 Math.Floor)并转换为 int 以获得整数值。

仅仅因为Ticks 具有您想要的相同数据类型并不意味着它就是您想要的。它本质上为您提供了TimeSpan 中数据的完整时间分辨率(恰好是十分之一微秒)。

【讨论】:

  • 十分之一 微秒 - 一个滴答声是 100ns。
  • @JonSkeet 啊,我的错 :) 奇怪的是,TimeSpan.Ticks 中的示例显示 Ticks 仅为总毫秒数的十倍(它正确地表示它在 remakrs 部分中是 100ns)。
  • 换句话说long lSubtract = Convert.ToInt64(date1.Subtract(date2).TotalMilliseconds) / 10;
  • @JonSkeet 啊,我刚刚注意到TotalMilliseconds 中有一个小数点。我又坏了:)
  • @DrGriff 实际上,/ 10000。但主要的一点是你不应该为此烦恼。这就是为什么TimeSpan 是一个带有辅助方法的结构,而不仅仅是long
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多