När jag kör nedanstående historia så får jag ett felmeddelande som lyder: Om du skall göra din kod lite mer .NET bör du skippa DatePart() funktionen. Den är där för bakåtkompabilitet. Tyvärr fungerar inte den metoden du angav. Han säger att gregoriancalender int är deklarerad, och när jag importerar den via system säger han samma sak. GregorianCalendar finns inte i System utan i System.Globalization som Andreas skrivit högst upp i sin kod. Jag vet inte riktigt om min hjärna hänger med nu men jag förklarade nog inte riktigt. Det är ingen kalender jag ska använda utan bara hämta ut veckonummer för att kunna göra en jämförelse med det jag hämtar ur databasen så jag visa rätt saker. Det är en skolmatsedel som jag bygger. <b>Det är ingen kalender jag ska använda utan bara hämta ut veckonummer </b> Jag satt och läste lite om det där och det stämmer. Jag satt och tänkte på det efteråt att det finns ju ett antal olika kalendersystem på den här planeten. det är ju långt ifrån alla som firar nyår den 31 december.Veckonummer
Cast from string "ww" to type 'Double' is not valid.
Varför???
<code>
Dim dagDatum As Date = Date.Today
Dim MyStr As String
'Formatet på datumen ska vara europeiskt.
MyStr = Format(dagDatum, "dddd d MMM yyyy")
Dim IntVecka as integer = WOY(MyStr)
lblVeckoNummer.Text = IntVecka
</code>
<code>
Function WOY(ByVal MyDate) ' Week Of Year
WOY = Format(MyDate, "ww")
If WOY > 52 Then
If Format(MyDate + 7, "ww") = 2 Then
WOY = 1
End If
End If
End Function
</code>Sv: Veckonummer
Imports System.Globalization
Module Module1
Sub Main()
Dim dagDatum As Date = Date.Today
Dim MyStr As String
'Formatet på datumen ska vara europeiskt.
MyStr = Format(dagDatum, "dddd d MMM yyyy")
Dim IntVecka As Integer = WOY(MyStr)
Console.WriteLine(IntVecka)
Console.Read()
End Sub
Function WOY(ByVal MyDate As Date) ' Week Of Year
Dim c As New GregorianCalendar()
WOY = c.GetWeekOfYear(MyDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
If WOY > 52 Then
If c.GetWeekOfYear(MyDate.AddDays(7), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday) = 2 Then
WOY = 1
End If
End If
End Function
Sv:Veckonummer
Sv: Veckonummer
<code>
Imports System.Globalization
</code>
eller om du hellre skriver långa variabeldeklarationer
<code>
Dim c As New System.Globalization.GregorianCalendar
</code>Sv:Veckonummer
Sv: Veckonummer
Men för att hämta ett korrekt veckonummer så måste du veta vilken kalender du skall använda. Det finns ju mer än en kalender att hämta veckonumemr ifrån, de som finns i .Net är bla ChineseLunisolarCalendar, EastAsianLunisolarCalendar, GregorianCalendar, HebrewCalendar, HijriCalendar, JapaneseCalendar, JapaneseLunisolarCalendar, JulianCalendar, KoreanCalendar, KoreanLunisolarCalendar, PersianCalendar, TaiwanCalendar, TaiwanLunisolarCalendar, ThaiBuddhistCalendar och UmAlQuraCalendar.
Sverige är ett av få länder (faktiskt bara ett av två) som har haft februari med 30 dagar i och det berodde på att vi hamnade i otakt med den julianska kalendern när den användes. Ryssland hade det på trettiotalet då året hade tolv månader med vardera 30 dagar (de extra 5 dagarna var inte med i kalendern ytan blev någon slags helgdagar). Sv:Veckonummer