让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;