我正在尝试比较来自传入请求的时间戳和数据库存储值。当然,SQL Server在时间上保持一些毫秒的精度,当读取到. net DateTime时,它包含了这些毫秒。但是,传入系统的请求不能提供这样的精度,所以我只需要去掉毫秒。
我觉得我遗漏了一些明显的东西,但我还没有找到一种优雅的方法来做到这一点(c#)。
我正在尝试比较来自传入请求的时间戳和数据库存储值。当然,SQL Server在时间上保持一些毫秒的精度,当读取到. net DateTime时,它包含了这些毫秒。但是,传入系统的请求不能提供这样的精度,所以我只需要去掉毫秒。
我觉得我遗漏了一些明显的东西,但我还没有找到一种优雅的方法来做到这一点(c#)。
当前回答
与其放弃毫秒然后比较,为什么不比较差异呢?
DateTime x; DateTime y;
bool areEqual = (x-y).TotalSeconds == 0;
or
TimeSpan precision = TimeSpan.FromSeconds(1);
bool areEqual = (x-y).Duration() < precision;
其他回答
DateTime d = DateTime.Now;
d = d.AddMilliseconds(-d.Millisecond);
在我的情况下,我的目标是从datetimePicker工具保存TimeSpan,而不节省秒和毫秒,这里是解决方案。
首先转换datetimePicker。值转换为你想要的格式,我的格式是“HH:mm”,然后将其转换回TimeSpan格式。
var datetime = datetimepicker1.Value.ToString("HH:mm");
TimeSpan timeSpan = Convert.ToDateTime(datetime).TimeOfDay;
一种简单的阅读方法是……
//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...
我知道这很容易理解,但是它缺乏性能。
var date = DateTime.Now;
date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Kind);
与其放弃毫秒然后比较,为什么不比较差异呢?
DateTime x; DateTime y;
bool areEqual = (x-y).TotalSeconds == 0;
or
TimeSpan precision = TimeSpan.FromSeconds(1);
bool areEqual = (x-y).Duration() < precision;