Eon*_*Eon 8 c# datetime casting
我有一个理论为什么以下代码不能产生我需要的结果:
endDate = DateTime.UtcNow.AddDays(1).ToShortDateString() + " " +
DateTime.UtcNow.TimeOfDay.Subtract(
new TimeSpan(0, 0, 0, 0, DateTime.UtcNow.TimeOfDay.Milliseconds));
Run Code Online (Sandbox Code Playgroud)
处理器必须计算DateTime.UtcNow.TimeOfDay.Milliseconds,并且由于CPU的单个刻度的时间长度(以及处理此属性并返回结果的时间),它不表示DateTime.UtcNow.TimeOfDay.Milliseconds将减去由指定的精确毫秒数.DateTime.UtcNow.TimeOfDay
我需要知道,什么是最简单和最有效的方法来消除毫秒数DateTime.UtcNow.TimeOfDay,而不必使用大量的处理器时间?我的这个应用程序非常大,这个问题非常简单.但是当部署此应用程序时,它没有空间使其不稳定.必须修剪此毫秒,因为它被发送到SQL Server中的存储过程,并且此特定存储过程不支持DateTimes上的毫秒.我也经常遇到这个问题,但我通常会将日期转换为字符串(这是一个独立的演员),在句点处以毫秒分割字符串,并使用索引位置0来获取我需要的时间.有更短,更有效的方法吗?
稳定性和速度对我来说是最重要的.
提前致谢
小智 8
您需要了解的有关自定义DateTime ToString格式的所有信息都在MSDN上.
简单来说,这样的事情:
endDate = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd hh:mm:ss");
Run Code Online (Sandbox Code Playgroud)
(根据需要改变格式)
不要在同一表达式中重复使用Now/ UtcNowproperty.获取值一次,并在不同的地方使用相同的值:
DateTime now = DateTime.Now;
endDate = now.AddDays(1).ToShortDateString() + " " +
now.TimeOfDay.Subtract(
new TimeSpan(0, 0, 0, 0, now.TimeOfDay.Milliseconds));
Run Code Online (Sandbox Code Playgroud)
如果您只想以特殊方式格式化日期,并且不需要实际的DateTime值,则可以跳过格式中的毫秒,例如:
endDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
在将值发送到数据库时,不应将其作为字符串发送,而应作为DateTime值发送:
DateTime now = DateTime.Now;
DateTime endDate = now - new TimeSpan(0, 0, 0, 0, now.TimeOfDay.Milliseconds);
Run Code Online (Sandbox Code Playgroud)
如果您想删除毫秒而不会对滴答声有任何问题。
DateTime d = DateTime.Now;
var newDate = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22283 次 |
| 最近记录: |