SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • ASUS Campus Life

    ASUS Campus

    18 Mart 2013
  • fufko

    fufko

    27 ŞUBAT 2006