我正在尝试比较来自传入请求的时间戳和数据库存储值。当然,SQL Server在时间上保持一些毫秒的精度,当读取到. net DateTime时,它包含了这些毫秒。但是,传入系统的请求不能提供这样的精度,所以我只需要去掉毫秒。

我觉得我遗漏了一些明显的东西,但我还没有找到一种优雅的方法来做到这一点(c#)。


当前回答

DateTime d = DateTime.Now;
d = d.AddMilliseconds(-d.Millisecond);

其他回答

四舍五入:四舍五入到第二:

dateTime.AddTicks(-dateTime.Ticks % TimeSpan.TicksPerSecond)

替换为TicksPerMinute以四舍五入到分钟。


如果您的代码对性能敏感,请谨慎处理

new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second)

我的应用在System.DateTime.GetDatePart中花费了12%的CPU时间。

一种简单的阅读方法是……

//Remove milliseconds
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss", null);

和更多的……

//Remove seconds
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH:mm"), "yyyy-MM-dd HH:mm", null);

//Remove minutes
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH"), "yyyy-MM-dd HH", null);

//and go on...

我知道这很容易理解,但是它缺乏性能。

你可以简单地使用Split

 new TimeSpan(new DateTime(1970, 1, 1).Ticks).TotalSeconds.ToString().Split('.')[0]
var date = DateTime.Now;

date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Kind);

我知道答案很晚了,但是摆脱毫秒的最好方法是

var currentDateTime = DateTime.Now.ToString("s");

尝试打印变量的值,它将显示日期时间,没有毫秒。