Hej! Hmm.. DatePart?? Jag har gjort en mycket användbar liten funktion i c# som jag bifogar här. System.Globalization.Calendar.GetWeekOfYear har dessvärre en bugg som gör att den returnerar fel vecka för vissa datum. Samma bugg fanns för övrigt redan i DatePart i VBScript.Problem med "vecko-nummer" i min kalender
Jag har gjort en kalender på min sida, men den visar fel vecka, förra året var det rätt
men detta år blir det fel.
Jag har sett att man kan ställa in hur man ska räkna, om den ska börja med vecka 1 när
första veckan innehåller mer än 4 dagar, eller en full vecka, o.s.v..
Men hur jag än gör så blir det alltid något annat år (nästa eller föregående som blir fel)
Hur löser man det?? något som har en bra förmel?
Jag använder mig av DatePart(.... WeekOfYear, Now,...)
(kommer inte ihåg, har den exakta koden hemma)
Här är kalendern... http://www.x40nordic.com
Jag skriver i VB.NET
M.v.h.
Johan.NETSv: Problem med "vecko-nummer" i min kalender
Funktionen tar ett datum och returnerar veckonumret som int.
public static int GetWeek( DateTime date )
{
System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo("sv-SE");
System.Globalization.Calendar c = cult.Calendar;
try
{
return c.GetWeekOfYear( date,
System.Globalization.CalendarWeekRule.FirstFourDayWeek,
System.DayOfWeek.Monday);
}
catch
{
return -1;
}
}
och här i nån form av VB
<code>
Public shared GetWeek( date as DateTime ) as int
{
Dim cult as System.Globalization.CultureInfo = new System.Globalization.CultureInfo("sv-SE")
Dim c as System.Globalization.Calendar
c = cult.Calendar;
return c.GetWeekOfYear( date,
System.Globalization.CalendarWeekRule.FirstFourDayWeek,
System.DayOfWeek.Monday);
}
</code>
Här använder du alltså ramverkets inbyggda funktionalitet istället. Bra va?
Hoppas det hjälper dig lite bättre.
//Mikael
Sv:Problem med "vecko-nummer" i min kalender
http://support.microsoft.com/kb/q200299/
Du kan använda den här istället:// Bugfix replacement for System.Globalization.Calendar.GetWeekOfYear(date, Monday, FirstFourDayWeek)
// Copyright 2005 Göran Andersson
public static int GetWeekOfYear(DateTime date) {
DateTime first, start;
int year;
year = date.Year + 1;
do {
first = new DateTime(year--, 1, 1);
start = first.AddDays(3 - (((int)first.DayOfWeek + 2) % 7));
} while (date < start);
return ((int)date.Subtract(start).TotalDays) / 7 + 1;
}