Veckonummer från UNIX-time? LÖST
Veckonummer från UNIX-time? LÖST
Känner någon av Er till var jag kan hitta en färdig algoritm för att få fram det svenska veckonumret från "UNIX-time"? Inga flyttal eller annat krångel. Skall köras på en PIC.
Även en algoritm som talar om ifall det råder svensk sommartid är av intresse.
Det finns redan rutiner som separerar upp UNIX-time i HH:MM:SS, YY:MM:DD samt veckodag. Allt i form av binära tal. Dessa är givetvis tillgängliga att ingå i ovanstående uppgifter.
Även en algoritm som talar om ifall det råder svensk sommartid är av intresse.
Det finns redan rutiner som separerar upp UNIX-time i HH:MM:SS, YY:MM:DD samt veckodag. Allt i form av binära tal. Dessa är givetvis tillgängliga att ingå i ovanstående uppgifter.
Senast redigerad av Marta 21 oktober 2008, 17:27:28, redigerad totalt 1 gång.
Ja, veckan börjar på måndagar. Numreringen börjar på den vecka som innehåller årets första torsdag, som är första dagen efter en halv vecka. Därigenom kan förra årets numrering fortsätta in på nästa år och samma vecka kan aldrig få två olika nummer. Ett från det nya året och ett från det gamla. Det inträffar i de system som används i vissa länder när vecka och år inte byter på samma dag.
FreeBSD:
/bin/date
Wed Sep 17 01:54:16 CEST 2008
/bin/date "+%V %U"
38 37
http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/date/ - date.c
if (*argv && **argv == '+') {
format = *argv + 1;
++argv;
}
(void)strftime(buf, sizeof(buf), format, <);
strftime -- format date and time
Standard C Library (libc, -lc)
%U is replaced by the week number of the year (Sunday as the first day
of the week) as a decimal number (00-53).
%V is replaced by the week number of the year (Monday as the first day
of the week) as a decimal number (01-53). If the week containing
January 1 has four or more days in the new year, then it is week 1;
otherwise it is the last week of the previous year, and the next
week is week 1.
http://www.freebsd.org/cgi/cvsweb.cgi/s ... c/stdtime/ - strftime.c
case 'V': /* ISO 8601 week number */
.
.
Bara att läsa..
/bin/date
Wed Sep 17 01:54:16 CEST 2008
/bin/date "+%V %U"
38 37
http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/date/ - date.c
if (*argv && **argv == '+') {
format = *argv + 1;
++argv;
}
(void)strftime(buf, sizeof(buf), format, <);
strftime -- format date and time
Standard C Library (libc, -lc)
%U is replaced by the week number of the year (Sunday as the first day
of the week) as a decimal number (00-53).
%V is replaced by the week number of the year (Monday as the first day
of the week) as a decimal number (01-53). If the week containing
January 1 has four or more days in the new year, then it is week 1;
otherwise it is the last week of the previous year, and the next
week is week 1.
http://www.freebsd.org/cgi/cvsweb.cgi/s ... c/stdtime/ - strftime.c
case 'V': /* ISO 8601 week number */
.
.
Bara att läsa..

Finns lite utförligare om ISO 8601 på wikipedia: http://en.wikipedia.org/wiki/ISO_8601#Week_dates
Dags att gå vidare med veckonumren.
Egentligen väldigt lätt om det inte vore för 6 datum, 29/12 till 3/1...
Innan jag lägger ner mer arbete på detta, finns det någon färdig algoritm att hämta som bygger på heltal?
Om inte kanske någon har en URL där man kan slå fram veckonummer för olika årtal? Detta för att ag skulle vilja veta sista veckonumret i dessa år, samt i året före, alla 2000-någonting, för att kunna validera en egen algoritm.
01 02 03 05 06 09 10 00 04 08 12 16 20 24
Egentligen väldigt lätt om det inte vore för 6 datum, 29/12 till 3/1...
Innan jag lägger ner mer arbete på detta, finns det någon färdig algoritm att hämta som bygger på heltal?
Om inte kanske någon har en URL där man kan slå fram veckonummer för olika årtal? Detta för att ag skulle vilja veta sista veckonumret i dessa år, samt i året före, alla 2000-någonting, för att kunna validera en egen algoritm.
01 02 03 05 06 09 10 00 04 08 12 16 20 24
Den här koden har jag i min dörrlogger för justering av sommartid.
Är säker på att jag skrev beräkning för veckonummer, men den hittar jag inte just nu.
Är säker på att jag skrev beräkning för veckonummer, men den hittar jag inte just nu.
Kod: Markera allt
// Summertime, if sunday after 24 march it´s the last sunday in march, adjust for summertime
if ( timedate->clkH == 2 && timedate->dateD > 24 && timedate->dateM == M_MAR && timedate->dayOfWeek == D_SUN ) {
timedate->clkH = 3;
// Normal time, if sunday after 24 october it´s the last sunday in october
} else if ( timedate->clkH == 3 && timedate->dateD > 24 && timedate->dateM == M_OCT && timedate->dayOfWeek == D_SUN ) {
if ( !timedate->status.bits.normTimeAdj ) {
timedate->clkH = 2;
timedate->status.bits.normTimeAdj = 1;
} else {
timedate->status.bits.normTimeAdj = 0;
}
}