17 HAZİRAN 2009, ÇARŞAMBA
Kesmek için nasıl bir milisaniye .NET DateTime
Veritabanı saklı bir değere gelen istek zaman damgası karşılaştırmak için çalışıyorum. Tabii ki SQL Server milisaniye bir okuma zamanı, ve bazı hassas tutar .NET DateTime, o milisaniye içerir. Sisteme gelen isteği, ancak, sadece milisaniye bırakmak zorundayım böylece kesinlik sağlamıyor.
Çok belirgin bir şey eksik gibi hissediyorum, ama bunu yapmak için zarif bir yol bulamadım (C#).
CEVAP
17 HAZİRAN 2009, ÇARŞAMBA
Aşağıdaki kesirli milisaniye vardır, bir de korur özelliği (Yerel), Utc veya Tanımsız bir DateTime için çalışacak.
DateTime dateTime = ... anything ...
dateTime = new DateTime(
dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond),
dateTime.Kind
);
veya eşdeğer ve kısa:
dateTime = dateTime.AddTicks( - (dateTime.Ticks % TimeSpan.TicksPerSecond));
Bu uzantı yöntemi genelleştirilmiş olabilir:
public static DateTime Truncate(this DateTime dateTime, TimeSpan timeSpan)
{
if (timeSpan == TimeSpan.Zero) return dateTime; // Or could throw an ArgumentException
return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}
aşağıdaki gibi kullanılır
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
...
Bunu Paylaş:
Nasıl Python epoch (unix zaman) beri m...
Nasıl tarih sadece SQL Server datetime...
Nasıl MySQL bir Datetime sütun için va...
Bir Unix zaman damgası DateTime dönüşt...
Nasıl Java "X dakika x saniye&quo...