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

  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005
  • paulandstorm

    paulandstorm

    4 EYLÜL 2006
  • tsweeney79

    tsweeney79

    21 Ocak 2008