让datetime.now返回到最近的秒

我有一个“要求”给出最近的第二个时间戳…但不是更准确。 舍入或截断时间很好。

我想出了这种可憎的事

dateTime = DateTime.Parse(DateTime.UtcNow.ToString("U")); 

(U是长格式的日期和时间。“2007年1月3日17:25:30”)

是否有一些不那么可怕的方法来实现这一目标?

编辑:所以从链接截断毫秒回答(感谢约翰奥多姆)我将这样做

  private static DateTime GetCurrentDateTimeNoMilliseconds() { var currentTime = DateTime.UtcNow; return new DateTime(currentTime.Ticks - (currentTime.Ticks % TimeSpan.TicksPerSecond), currentTime.Kind); } 

几乎没那么可怕..但它确实保留了我所关心的日期时间的“种类”。 我的解决方案没有。

您可以将此实现为扩展方法,允许您使用基础Ticks将给定DateTime修剪为指定的精度:

 public static DateTime Trim(this DateTime date, long ticks) { return new DateTime(date.Ticks - (date.Ticks % ticks), date.Kind); } 

然后很容易将你的日期修剪成各种精度,如下所示:

 DateTime now = DateTime.Now; DateTime nowTrimmedToSeconds = now.Trim(TimeSpan.TicksPerSecond); DateTime nowTrimmedToMinutes = now.Trim(TimeSpan.TicksPerMinute); 

您可以使用此构造函数:

 public DateTime( int year, int month, int day, int hour, int minute, int second ) 

所以它会是:

 DateTime dt = DateTime.Now; DateTime secondsDt = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second); 

如果你真的想要将时间四舍五入到最接近的秒,你可以使用:

 DateTime.MinValue .AddSeconds(Math.Round((DateTime.Now - DateTime.MinValue).TotalSeconds)); 

但是,除非额外的半秒确实有所作为,否则你可以删除毫秒部分:

 DateTime.Now.AddTicks( -1 * (DateTime.Now.Ticks % TimeSpan.TicksPerSecond)); 

试试这个

 TimeSpan span= dateTime.Subtract(new DateTime(1970,1,1,0,0,0, DateTimeKind.Utc)); return span.TotalSeconds;