데이터 타임을 특정 정밀도로 다듬는 더 좋은 방법이 있습니까? [복제하다
문제
이 질문은 이미 여기에 답이 있습니다.
DateTime 객체를 특정 정밀도로 다듬는 가장 좋은 방법은 무엇입니까? 예를 들어, '2008-09-29 09:41:43'의 값을 가진 DateTime이 있다면, 순간에만 정밀도가되기를 원합니다. 이보다 더 좋은 방법이 있습니까?
private static DateTime TrimDateToMinute(DateTime date)
{
return new DateTime(
date.Year,
date.Month,
date.Day,
date.Hour,
date.Minute,
0);
}
내가 정말로 원하는 것은 가변적으로 만들어서 두 번째, 분, 시간 또는 하루에 정밀도를 설정할 수 있도록하는 것입니다.
해결책
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();
}
}
다른 팁
열거를 사용할 수 있습니다
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;
}
}
필요에 따라 확장하십시오.
여기에는 몇 가지 좋은 솔루션이 있지만,이를 수행해야 할 때 간단히 수행해야합니다.
DateTime truncDate;
truncDate = date.Date; // trim to day
truncDate = date.Date + TimeSpan.Parse(string.Format("{0:HH:00:00}", date)); // trim to hour
truncDate = date.Date + TimeSpan.Parse(string.Format("{0:HH:mm}", date)); // trim to minute
truncDate = date.Date + TimeSpan.Parse(string.Format("{0:HH:mm:ss}", date)); // trim to second
도움이되기를 바랍니다.
나는이 방법을 좋아한다. 누군가는 날짜 종류 등을 보존하는 것이 좋다고 언급했습니다. 이것은 새로운 날짜를 만들지 않기 때문에 단순히 나머지 진드기를 빼냅니다.
private DateTime FloorToHour(DateTime dt)
{
return dt.AddTicks(-1 * (dt.Ticks % TimeSpan.TicksPerHour));
}
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();
}
DateTime dt = new DateTime()
dt = dt.AddSeconds(-dt.Second)
위의 코드는 몇 초를 잘라냅니다.
제휴하지 않습니다 StackOverflow