Permalänk
Medlem

Beräkna vecko-nummer

Hittade lite inlägg för beräkning om veckonummer i Java bla, men iget jag sökte efter.

Så jag undra om det finns ett matematiskt sätt att räkna ut det på...

Jag går med på att exempel viss ändra för skått år manuellt så man slipper det i sin beräkning...

Visa signatur

LEGO Rules

Permalänk
Medlem

Jag hittade en algoritm (i C, tror jag) mot slutet här: http://www.pellesoft.se/communicate/forum/view.aspx?msgid=764... Det verkar inte enkelt.

EDIT: Den enklaste lösningen är förmodligen att parsa http://www.vecka.nu

Permalänk
Medlem

kanske är dum nu, men borde väl vara enkelt att räkna ut veckonr?!
man kan ju alltid få fram datum....

1:a jan är alltid i vecka 1....
man kan få fram vilken veckodag 1a jan är.... sedan varje jämn 7e dag är en vecka efter.... äh... tror inte det där är något svårt... man måste veta hur många dagar alla månader har också.. samt om det är skottår....
tror jag fixar det där rätt snabbt om jag skulle få testa å tweaka lite

Permalänk
Medlem

Ett problem är att 1:a jan inte alltid är i vecka 1. Se tråden jag länkar till ovan.

Permalänk
Glömsk

I år exempelvis var 1 januari vecka 53.

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

ja just ja.... åh, yrt av mig... hmm ok då...

Permalänk
Medlem

Thx...

Tack för svaren, sitter och klurar på hur jag skall programera in det i LCDHype, vill alltså få upp veckan på min LCD, man borde kunna ta info från www.vecka.nu och göra ett skript från den informationen som man får där. Blir lite jobbigt att ansluta hella tiden för att få reda på vilken vecka det är...

Fick en fundering till om man programerar ett år framåt dag för dag, ex, 4 febuari ges ett nummer på 5(vecka), 8 februari ger man nummer 6 och så vidare så man får pilla att programera ett hellt år, 364 ställa, ba låter lite segt, men låter som mest simplats...

Hittade annars en lite matematisk uträkning (med buggar) som borde fungera att skripta in
http://www.pellesoft.se/communicate/forum/view.aspx?msgid=764...
LCDHype har som tur é stöd för matematiska uträkningar så det borde inte bli några problem...

Visa signatur

LEGO Rules

Permalänk
Citat:

EDIT: Den enklaste lösningen är förmodligen att parsa http://www.vecka.nu [/B]

känns inte som det blir ett helt solidt program med sådana lösningar.. : )

Permalänk
Medlem

men man kan väl annars utgå från ett givet datum, typ idag... man vet vilken vecka det är.... sedan så varje 7 dagar efteråt ger en ny vecka.... det är väl iaf ändå alltid sant?
har inte tid att komma på nåt vettigt nu.... men isf så går det ju att göra nåt vettigt...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av totoo
men man kan väl annars utgå från ett givet datum, typ idag... man vet vilken vecka det är.... sedan så varje 7 dagar efteråt ger en ny vecka....

Då har du problemet med olika antal dagar för olika månader och skottår.

Kan bara intyga det som de andra har sagt. Att räkna ut veckonummer är ett pärs. Jag skrev ett program till min handdator som skulle visa veckonummeret på skrivbordet, och fick 3 nervsammanbrott på raken. Trodde flera gånger att jag fick till det, men när jag kollade upp årsskiften för olika årtal framåt, så var det alltid nån jäkel som var fel.

Dessutom är veckonummeren är luddig standard, om man ens kan kalla den för det. I vissa länder så kan altså början av januari höra till vecka 53, medans räkningen i andra alltid börjar från 1.

Visa signatur
Permalänk
Medlem

jojo, vet att det är det där med månader och skottår....
men det tror jag man fixar

Permalänk
Medlem

Jag har en funktion som räknar fram veckonummer (VB Script)

Public Function WeekNumber(InDate) Dim DayNo Dim StartDays Dim StopDays Dim StartDay Dim StopDay Dim VNumber Dim ThurFlag DayNo = Days(InDate) StartDay = Weekday(DateSerial(Year(InDate), 1, 1)) - 1 StopDay = Weekday(DateSerial(Year(InDate), 12, 31)) - 1 ' Number of days belonging to first calendar week StartDays = 7 - (StartDay - 1) ' Number of days belonging to last calendar week StopDays = 7 - (StopDay - 1) ' Test to see if the year will have 53 weeks or not If StartDay = 4 Or StopDay = 4 Then ThurFlag = True Else ThurFlag = False End If VNumber = (DayNo - StartDays - 4) / 7 ' If first week has 4 or more days, it will be calendar week 1 ' If first week has less than 4 days, it will belong to last year's ' last calendar week If StartDays >= 4 Then WeekNumber = Round((VNumber) + 2,0) Else WeekNumber = round((VNumber) + 1,0) End If ' Handle years whose last days will belong to coming year's first ' calendar week If WeekNumber > 52 And Not ThurFlag Then WeekNumber = 1 End If ' Handle years whose first days will belong to the last year's ' last calendar week If WeekNumber = 0 Then WeekNumber = WeekNumber(DateSerial(Year(InDate) - 1, 12, 31)) End If End Function

Permalänk
Hedersmedlem

Använda funktionen strftime som finns i ctime kanske?

#include <cstdio> #include <ctime> int main() { time_t tm; struct tm *ptr; char str[100]; tm = time(0); ptr = localtime(&tm); strftime(str, 100, "%W", ptr); printf("Week: %s\n", str); }

Jag vet att det är C men det är också ett c-bibliotek så...
Kan fortfarande användas med C++ som synes ovan.

EDIT: Aj då, såg nu att det vara Java...

EDIT2: Java:

import java.text.SimpleDateFormat; import java.util.Date; class Week { public static void main(String argv[]) { Date today; String output; SimpleDateFormat formatter; formatter = new SimpleDateFormat("w"); today = new Date(); output = formatter.format(today); System.out.println(output); } }

EDIT3: Men jag måste vara grymt trött! Så var det bara algortimen du var ute efter. =/

Aja, exemplen får stå kvar ifall någon vill ha dem.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Icanos och m0REc: är det där svenska veckonummer eller utrikiska? Jag har fått för mig att de fungerar olika.

Permalänk
Hedersmedlem

Malesca: Hrm, C/C++ exemplet visade rätt, Java visade en vecka framåt, annars så.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Scriptet jag skrev fungerar perfekt (Kör på t.ex en hemsida och då använder jag mig av svenska datum) har ej testat på andra.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Malesca
Icanos och m0REc: är det där svenska veckonummer eller utrikiska? Jag har fått för mig att de fungerar olika.

Detta skriver ut det korrekta veckonummret i Java:

import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; class Week { public static void main(String argv[]) { Date today; Locale current; String output; SimpleDateFormat formatter; current = new Locale("sv", "SE"); formatter = new SimpleDateFormat("w", current); today = new Date(); output = formatter.format(today); System.out.println(output); } }

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av m0REc
Detta skriver ut det korrekta veckonummret i Java:

Åter igen, det finns två olika 'standarder'. Det går inte att sägga villket som är korrekt.

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Malesca
...
EDIT: Den enklaste lösningen är förmodligen att parsa http://www.vecka.nu

Jag har själv erfarenhet av att vecka.nu visade fel vecka vid senaste årsskiftet. Sedan dess använder jag istället http://klockan.just.nu ... jepp.

Kan dock vara lite svårare att läsa.

Citat:

Ursprungligen inskrivet av s.c.s.i
Åter igen, det finns två olika 'standarder'. Det går inte att sägga villket som är korrekt.

Sverige har valt en standard, då får man väl följa den.