Sida 1 av 2
Veckonummer från UNIX-time? LÖST
Postat: 16 september 2008, 20:42:24
av Marta
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.
Postat: 16 september 2008, 21:06:25
av blueint
Ger veckonummer på FreeBSD:
date +%V
Torde gå att fiska upp algoritmen ur källkoden.
Postat: 16 september 2008, 21:16:51
av hcb
Intressant.
`date +%V' ger på min Mac
38
medan Apples iCal påstår att veckonumret är 37 ...
Dags att skicka in en buggrapport om ingen annan gjort det
Tack för tipset, förresten!
Postat: 16 september 2008, 21:29:27
av sodjan
Postat: 16 september 2008, 21:32:41
av ahlsten
hcb: det finns olika veckonumreringsstandard har jag för mig... testa date +%U också
Postat: 16 september 2008, 22:22:09
av Marta
Ha inte för Dig, det ÄR så att det finns olika system. Det var därför jag speciellt skrev att det skulle vara svenskt veckonummer. Här i Sveriige är det någon ISO-standard som används, kommer inte ihåg dess nummer.
Postat: 16 september 2008, 22:57:12
av mrOh
Linux date och BSD date är olika och har inte samma syntax.
Edit: Men bara för det så funkade 'date +%U' i båda varianterna
Postat: 16 september 2008, 23:11:50
av ahlsten
GNU date och BSD date måste det väl vara isf? För GNU date finns hursomhelst %U och %V för veckor, som börjar med söndag resp. måndag.
Marta: Svenska ISO 8601:1998-veckor börjar på måndagar, har jag för mig.

Postat: 17 september 2008, 00:22:06
av Marta
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.
Postat: 17 september 2008, 00:32:38
av sodjan
> Numreringen börjar på den vecka som innehåller årets första torsdag,...
Och om 1-jan är en torsdag, så kommer 29,30 och 31/12 från föregående
år att tillhöra "vecka 1", kan vara lite förvillande...

Postat: 17 september 2008, 00:37:14
av ahlsten
Tycker det är enklast att se det som att den vecka som innehåller 4 januari alltid är vecka 1.
Postat: 17 september 2008, 02:07:35
av blueint
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..

Postat: 26 september 2008, 09:31:31
av RasmusB
Finns lite utförligare om ISO 8601 på wikipedia:
http://en.wikipedia.org/wiki/ISO_8601#Week_dates
Postat: 9 oktober 2008, 20:44:15
av Marta
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
Postat: 10 oktober 2008, 18:24:25
av pheer
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.
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;
}
}