将DateTime对象修剪为特定精度的最佳方法是什么?例如,如果我的DateTime值为'2008-09-29 09:41:43',但我只想要精确到分钟,有没有更好的方法来做到这一点?
private static DateTime TrimDateToMinute(DateTime date)
{
return new DateTime(
date.Year,
date.Month,
date.Day,
date.Hour,
date.Minute,
0);
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是让它变量,以便我可以将其精度设置为秒,分钟,小时或日.
Bar*_*bat 86
static class Program
{
//using extension method:
static DateTime Trim(this DateTime date, long roundTicks)
{
return new DateTime(date.Ticks - date.Ticks % roundTicks, date.Kind);
}
//sample usage:
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerDay));
Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerHour));
Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerMillisecond));
Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerMinute));
Console.WriteLine(DateTime.Now.Trim(TimeSpan.TicksPerSecond));
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用枚举
public enum DateTimePrecision
{
Hour, Minute, Second
}
public static DateTime TrimDate(DateTime date, DateTimePrecision precision)
{
switch (precision)
{
case DateTimePrecision.Hour:
return new DateTime(date.Year, date.Month, date.Day, date.Hour, 0, 0);
case DateTimePrecision.Minute:
return new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, 0);
case DateTimePrecision.Second:
return new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second);
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
并根据需要进行扩展.
我喜欢这个方法。有人提到保留 Date Kind 等很好。这样做是因为您不必创建新的 DateTime。DateTime 是从原始 DateTime 正确克隆的,它只是减去剩余的刻度。
public static DateTime FloorTime(DateTime dt, TimeSpan interval)
{
return dt.AddTicks(-1 * (dt.Ticks % interval.Ticks));
}
Run Code Online (Sandbox Code Playgroud)
用法:
dt = FloorTime(dt, TimeSpan.FromMinutes(5)); // floor to the nearest 5min interval
dt = FloorTime(dt, TimeSpan.FromSeconds(1)); // floor to the nearest second
dt = FloorTime(dt, TimeSpan.FromDays(1)); // floor to the nearest day
Run Code Online (Sandbox Code Playgroud)