有没有更好的方法可以将DateTime调整为特定的精度?
时间:2020-03-06 14:55:10 来源:igfitidea点击:
将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); }
我真正想要的是使其可变,以便可以将其精度设置为秒,分钟,小时或者天。
解决方案
我们可以使用枚举
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; } }
并根据需要扩展。
static DateTime TrimDate(DateTime date, long roundTicks) { return new DateTime(date.Ticks - date.Ticks % roundTicks); } //sample usage: static void Main(string[] args) { Console.WriteLine(DateTime.Now); Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerDay)); Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerHour)); Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerMillisecond)); Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerMinute)); Console.WriteLine(TrimDate(DateTime.Now, TimeSpan.TicksPerSecond)); Console.ReadLine(); }
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(); } }