هل هناك طريقة أفضل تقليم التاريخ والوقت محدد الدقة?[مكررة]
سؤال
هذا السؤال سبق الجواب هنا:
ما هي أفضل طريقة لتقليم التاريخ والوقت كائن معين الدقة?فعلى سبيل المثال ، إذا كان لدي 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);
}
ما كنت تريد حقا أن تجعل متغير بحيث لا يمكن تعيين الدقة إلى الثانية ، دقيقة ، ساعة أو يوم.
المحلول
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