I feel like I& # 39, m, t, but I haven& 명백하네 무언가 빠진 # 39 http://support. 우아한 길일 (C #).
다음 사용할 수 있는 분수 밀리초입니다, kingdome. seattle. DateTime 유지하고 있는 것과 같은 속성 (utc) 또는 로컬이며 정의되지 않은).
DateTime dateTime = ... anything ...
dateTime = new DateTime(
dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond),
dateTime.Kind
);
또는 이와 동등한 짧은:
dateTime = dateTime.AddTicks( - (dateTime.Ticks % TimeSpan.TicksPerSecond));
이 방법을 통해 확장명으로 일반화 될 수 있다.
public static DateTime Truncate(this DateTime dateTime, TimeSpan timeSpan)
{
if (timeSpan == TimeSpan.Zero) return dateTime; // Or could throw an ArgumentException
if (dateTime == DateTime.MinValue || dateTime == DateTime.MaxValue) return dateTime; // do not modify "guard" values
return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}
이는 다음과 같이 사용할 수 있습니다.
dateTime = dateTime.Truncate(TimeSpan.FromMilliseconds(1)); // Truncate to whole ms
dateTime = dateTime.Truncate(TimeSpan.FromSeconds(1)); // Truncate to whole second
dateTime = dateTime.Truncate(TimeSpan.FromMinutes(1)); // Truncate to whole minute
...
이 방법을 사용하면 모든 해결안에서는 잘라냅니다 이전 기준으로 확장명으로 대답할 것이다.
DateTime myDateSansMilliseconds = myDate.Truncate(TimeSpan.TicksPerSecond);
DateTime myDateSansSeconds = myDate.Truncate(TimeSpan.TicksPerMinute)
public static class DateTimeUtils
{
/// <summary>
/// <para>Truncates a DateTime to a specified resolution.</para>
/// <para>A convenient source for resolution is TimeSpan.TicksPerXXXX constants.</para>
/// </summary>
/// <param name="date">The DateTime object to truncate</param>
/// <param name="resolution">e.g. to round to nearest second, TimeSpan.TicksPerSecond</param>
/// <returns>Truncated DateTime</returns>
public static DateTime Truncate(this DateTime date, long resolution)
{
return new DateTime(date.Ticks - (date.Ticks % resolution), date.Kind);
}
}
가끔 잘라냅니다 무언가를 하려는 일정 기반, 같은 해 또는 월입니다. # 39 의 here& 확장명으로 방법을 선택할 수 있는 모든 해상도.
public enum DateTimeResolution
{
Year, Month, Day, Hour, Minute, Second, Millisecond, Tick
}
public static DateTime Truncate(this DateTime self, DateTimeResolution resolution = DateTimeResolution.Second)
{
switch (resolution)
{
case DateTimeResolution.Year:
return new DateTime(self.Year, 1, 1, 0, 0, 0, 0, self.Kind);
case DateTimeResolution.Month:
return new DateTime(self.Year, self.Month, 1, 0, 0, 0, self.Kind);
case DateTimeResolution.Day:
return new DateTime(self.Year, self.Month, self.Day, 0, 0, 0, self.Kind);
case DateTimeResolution.Hour:
return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerHour));
case DateTimeResolution.Minute:
return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerMinute));
case DateTimeResolution.Second:
return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerSecond));
case DateTimeResolution.Millisecond:
return self.AddTicks(-(self.Ticks % TimeSpan.TicksPerMillisecond));
case DateTimeResolution.Tick:
return self.AddTicks(0);
default:
throw new ArgumentException("unrecognized resolution", "resolution");
}
}
그러나 더 이상 명백하네 2 배 이상 빠른:
// 10000000 runs
DateTime d = DateTime.Now;
// 484,375ms
d = new DateTime((d.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond);
// 1296,875ms
d = d.AddMilliseconds(-d.Millisecond);
Down to the second round 로.
dateTime.AddTicks(-dateTime.Ticks % TimeSpan.TicksPerSecond)
'' Down to the round 로 대체하십시오 트릭스페르미노티 분입니다.
코드에 대한 신중한 경우 중요한 것은 성능입니까 구분
new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second)
App 는 에서 12% CPU 시간 내 움켜쥐고하나님을 [시스템.다테타임.제다테파르트] (https://referencesource.microsoft.com/ # mscorlib/system/datetime.cs, ff06f271f088f1a8).
쉽게 읽을 수 있는 방법이 있다.
//Remove milliseconds
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss", null);
등이 있습니다.
//Remove seconds
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH:mm"), "yyyy-MM-dd HH:mm", null);
//Remove minutes
DateTime date = DateTime.Now;
date = DateTime.ParseExact(date.ToString("yyyy-MM-dd HH"), "yyyy-MM-dd HH", null);
//and go on...
위에서 언급한 2 확장명은 솔루션 방법
public static bool LiesAfterIgnoringMilliseconds(this DateTime theDate, DateTime compareDate, DateTimeKind kind)
{
DateTime thisDate = new DateTime(theDate.Year, theDate.Month, theDate.Day, theDate.Hour, theDate.Minute, theDate.Second, kind);
compareDate = new DateTime(compareDate.Year, compareDate.Month, compareDate.Day, compareDate.Hour, compareDate.Minute, compareDate.Second, kind);
return thisDate > compareDate;
}
public static bool LiesAfterOrEqualsIgnoringMilliseconds(this DateTime theDate, DateTime compareDate, DateTimeKind kind)
{
DateTime thisDate = new DateTime(theDate.Year, theDate.Month, theDate.Day, theDate.Hour, theDate.Minute, theDate.Second, kind);
compareDate = new DateTime(compareDate.Year, compareDate.Month, compareDate.Day, compareDate.Hour, compareDate.Minute, compareDate.Second, kind);
return thisDate >= compareDate;
}
사용법:
bool liesAfter = myObject.DateProperty.LiesAfterOrEqualsIgnoringMilliseconds(startDateTime, DateTimeKind.Utc);
디아디스티스 대한 반응을 보였다. 그러나 이 바닥 분수, 내가 나를 위해 협력했습니다 분리하십시오 사단은 전에 곱셈 부분을 사용해야 했습니다. 그래서,
d = new DateTime((d.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond);
됩니다
d = new DateTime(Math.Floor(d.Ticks / TimeSpan.TicksPerSecond) * TimeSpan.TicksPerSecond);
꼭 이래야겠어요 분단 때문에 발생할 수 있는 두 개의 긴 긴 걱정했던것 값을 소수점 분리 후 이를 두고 있지만 정확한 부품으로부터 보정됩니다 연산뿐 동일한 값을 말한다.
에프시
DateID.Text = DateTime.Today.ToShortDateString();
Use ToShortDateString() //Date 2-02-2016
Use ToShortDateString() // Time
및 사용하여
ToLongDateString() // its show 19 February 2016.
P
(주) 에서 저장하지 않고, 그냥 시간 범위 내 경우에는 절약합니다 다테타임피커 도구에서는 초이고 밀리초입니다, avamar 솔루션은.
먼저 하는 것은 원하는 서식을 데이터베이스에구성원을 다테타임피커스발루 변환하십시오 내거냐 " HH:mm"; 그 후 다시 변환하시겠습니까 시간 범위.
var datetime = datetimepicker1.Value.ToString("HH:mm");
TimeSpan timeSpan = Convert.ToDateTime(datetime).TimeOfDay;