SORU
8 EYLÜL 2009, Salı


Yuvarlama DateTime nesneleri

Tarihler grafik uygulama için en yakın aralığı/kez tura istiyorum. Yuvarlama hassasiyeti her seviye için elde edilebilir, böylece aşağıdaki gibi uzatma yöntemi bir imza istiyorum:

static DateTime Round(this DateTime date, TimeSpan span);

Fikir on dakikalık bir zaman aralığı içinde geçecek olursam, en yakın on dakikalık aradan yuvarlak olmasıdır. Uygulama başımı alamıyorum biriniz ya da ona benzer bir şey daha önce yazılmış kullanmış olacak umuyorum.

Zemin, tavan veya yakın bir uygulama, her ikisi de olur bence.

Herhangi bir fikir?

Edit: @Sayesinde tvanfosson & @uygulanması bu gibi görünüyor ShuggyCoUk,:

public static class DateExtensions {
    public static DateTime Round(this DateTime date, TimeSpan span) {
        long ticks = (date.Ticks   (span.Ticks / 2)   1)/ span.Ticks;
        return new DateTime(ticks * span.Ticks);
    }
    public static DateTime Floor(this DateTime date, TimeSpan span) {
        long ticks = (date.Ticks / span.Ticks);
        return new DateTime(ticks * span.Ticks);
    }
    public static DateTime Ceil(this DateTime date, TimeSpan span) {
        long ticks = (date.Ticks   span.Ticks - 1) / span.Ticks;
        return new DateTime(ticks * span.Ticks);
    }
}

Ve denir ki: gibi

DateTime nearestHour = DateTime.Now.Round(new TimeSpan(1,0,0));
DateTime minuteCeiling = DateTime.Now.Ceil(new TimeSpan(0,1,0));
DateTime weekFloor = DateTime.Now.Floor(new TimeSpan(7,0,0,0));
...

Şerefe!

CEVAP
8 EYLÜL 2009, Salı


Kat

long ticks = date.Ticks / span.Ticks;

return new DateTime( ticks * span.Ticks );

Yuvarlak (orta nokta üzerinde

long ticks = (date.Ticks   (span.Ticks / 2)   1)/ span.Ticks;

return new DateTime( ticks * span.Ticks );

Tavan

long ticks = (date.Ticks   span.Ticks - 1)/ span.Ticks;

return new DateTime( ticks * span.Ticks );

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • tsweeney79

    tsweeney79

    21 Ocak 2008
  • Virtual Riot

    Virtual Riot

    19 Mayıs 2011