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

  • ODN

    ODN

    26 Kasım 2006
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007