SORU
22 HAZİRAN 2012, Cuma


Verilen tarihin doğru hafta numarasını almak

Çok Araştırdım ve çözümler, ama hiçbiri çok fazla bana 2012-12-31 için doğru hafta numarasını verin bulundu. Bildirimlerlink) bile örnek başarısız olur.

2012-12-31 Pazartesi, 1, denedim her yöntemi bana 53 verir Hafta olmalı bu nedenle. İşte ben denedim bu yöntemlerden bazıları,:

MDSN Kütüphane:

DateTimeFormatInfo dfi = DateTimeFormatInfo.CurrentInfo;
Calendar cal = dfi.Calendar;

return cal.GetWeekOfYear(date, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);

Çözüm 2:

return new GregorianCalendar(GregorianCalendarTypes.Localized).GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

Çözüm 3:

CultureInfo ciCurr = CultureInfo.CurrentCulture;
int weekNum = ciCurr.Calendar.GetWeekOfYear(dtPassed, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
return weekNum;

Güncelleme

Aşağıdaki yöntem aslında tarihi 2012-12-31 zaman 1 döndürür. Diğer bir deyişle, benim sorunum şu yöntemleri ISO-8601 standardı takip etmiyor.

// This presumes that weeks start with Monday.
// Week 1 is the 1st week of the year with a Thursday in it.
public static int GetIso8601WeekOfYear(DateTime time)
{
    // Seriously cheat.  If its Monday, Tuesday or Wednesday, then it'll 
    // be the same week# as whatever Thursday, Friday or Saturday are,
    // and we always get those right
    DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
    {
        time = time.AddDays(3);
    }

    // Return the week of our adjusted day
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}

CEVAP
22 HAZİRAN 2012, Cuma


ISO8601 hafta arasında küçük bir fark vardır MSDN page Bu belirtildiği gibi .Net hafta numaralandırma.

Daha iyi bir açıklama için MSDN Blog bu makale için başvurabilirsiniz: "ISO 8601 Week of Year format in Microsoft .Net"

Basitçe söylemek gerekirse, .Net hafta ISO standardı yok iken yıl arasında bölünmüş izin verir. Yazıda ayrıca, yılın son hafta için ISO 8601 hafta doğru numarasını almak için basit bir işlevi var.

GüncellemeAşağıdaki yöntem aslında ISO 8601 doğrudur (örneğin; Almanya) 2012-12-31 1 döndürür.

// This presumes that weeks start with Monday.
// Week 1 is the 1st week of the year with a Thursday in it.
public static int GetIso8601WeekOfYear(DateTime time)
{
    // Seriously cheat.  If its Monday, Tuesday or Wednesday, then it'll 
    // be the same week# as whatever Thursday, Friday or Saturday are,
    // and we always get those right
    DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
    {
        time = time.AddDays(3);
    }

    // Return the week of our adjusted day
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
} 

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • atKristaBradford

    atKristaBrad

    4 Aralık 2010
  • funbro1

    funbro1

    11 Aralık 2007
  • Karan Thakur

    Karan Thakur

    23 HAZİRAN 2010