C# 消除毫秒';是DateTime.UctNow.TimeOfDay的一部分吗?

C# 消除毫秒';是DateTime.UctNow.TimeOfDay的一部分吗?,c#,datetime,casting,C#,Datetime,Casting,我有一个理论,为什么下面的代码不能产生我需要的结果: endDate = DateTime.UtcNow.AddDays(1).ToShortDateString() + " " + DateTime.UtcNow.TimeOfDay.Subtract( new TimeSpan(0, 0, 0, 0, DateTime.UtcNow.TimeOfDay.Milliseconds)); 处理器必须计算DateTime.UtcNow.TimeOfDay.m

我有一个理论,为什么下面的代码不能产生我需要的结果:

 endDate = DateTime.UtcNow.AddDays(1).ToShortDateString() + " " +    
      DateTime.UtcNow.TimeOfDay.Subtract(
         new TimeSpan(0, 0, 0, 0, DateTime.UtcNow.TimeOfDay.Milliseconds));
处理器必须计算
DateTime.UtcNow.TimeOfDay.millizes
,并且由于CPU单个刻度的时间长度(以及处理此属性和返回结果的时间),它并不表示
DateTime.UtcNow.TimeOfDay.millizes
将减去
DateTime.UtcNow.TimeOfDay

我需要知道,从
DateTime.UtcNow.TimeOfDay
中删除毫秒的最简单和最有效的方法是什么,而不必使用大量处理器时间?
我的这个应用程序非常大,这个问题非常简单。但是,当部署此应用程序时,它就没有不稳定的空间。必须修剪此毫秒,因为它被发送到SQL Server中的存储过程,并且此特定存储过程不支持日期时间上的毫秒。我也经常遇到这个问题,但我通常会将日期转换为字符串(它本身就是一个强制转换),在毫秒的句点拆分字符串,并使用索引位置0来获取所需的时间。有没有一种更短、更有效的方法

稳定性和速度对我来说是最重要的


提前感谢

关于定制

简单地说,是这样的:

endDate = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd hh:mm:ss"); 

(根据需要更改格式)

现在不要在同一表达式中重复使用
属性。获取一次值,并在不同位置使用相同的值:

DateTime now = DateTime.Now;
endDate = now.AddDays(1).ToShortDateString() + " " +    
  now.TimeOfDay.Subtract(
     new TimeSpan(0, 0, 0, 0, now.TimeOfDay.Milliseconds));
如果只希望以特殊方式格式化日期,而不需要实际的DateTime值,则可以跳过格式中的毫秒,例如:

endDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
将值发送到数据库时,不应将其作为字符串发送,而应作为日期时间值发送:

DateTime now = DateTime.Now;
DateTime endDate = now - new TimeSpan(0, 0, 0, 0, now.TimeOfDay.Milliseconds);

使用MSDN中描述的C#DateTime。你对毫秒计算的分析很可能是错误的。此外,对于字符串连接,请使用StringBuilder。基本上,您可以从现有实例创建一个新的
DateTime
实例,但将所有内容都设置为“更小”,然后将毫秒设置为零。您可以使用扩展方法:

public static class DateTimeExtensions
{
   public static DateTime ZeroMilliseconds(this DateTime dt)
   {
      return new DateTime(((dt.Ticks / 10000000) * 10000000), dt.Kind);
   }
}
或使用您的代码查看完整示例:

var now = DateTime.Now;
endDate = now.AddDays(1).ToShortDateString() + " " + now.ZeroMilliseconds().TimeOfDay;

如果要删除毫秒而不出现任何滴答声问题

 DateTime d = DateTime.Now;
 var newDate = new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second);

你不能简单地执行
\u myDate.millides=0
?@Alxandr
DateTime
实例是不可变的,因此没有设置属性。如果可以在不使用毫秒的情况下指定字符串格式,则可以将其再次解析为
DateTime
为什么要在单个表达式中混合DateTime.Now和DateTime.UtcNow?我觉得这几乎肯定是错的。此外,还不清楚为什么要首先将其转换为字符串……所有内容都必须是uct。感谢您指出这一点,为什么我没有想到过去一个月所谓的大脑衰退——发生在我们所有人身上:)在这里使用StringBuilder没有任何好处——它是一个表达式,调用String.Concat也是如此。问题是存储过程希望值作为varchar值,尽管它是一个日期。我被迫将其作为字符串发送。当我在数据库中使用Datetimes时,我会记住你的帖子。为什么要投否决票?如果你不解释你认为错误的地方,那就无法改善答案。