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

  • bigky226

    bigky226

    11 HAZİRAN 2006
  • kylelandry

    kylelandry

    9 AĞUSTOS 2007
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011