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

  • ASUS

    ASUS

    22 EKİM 2005
  • huyked

    huyked

    28 Mart 2008
  • MkElite

    MkElite

    13 NİSAN 2012