Discussion:
Ugenumre
(for gammel til at besvare)
Bertel Lund Hansen
2012-09-10 22:11:05 UTC
Permalink
Hej alle

Jeg skal bruge en funktion der returnerer det korrekte ugenummer
når jeg kender datoen. Python har godt nok en indbygget mulighed,
men den svarer forkert efter dansk standard:

All days in a new year preceding the first Monday
are considered to be in week 0.

Er der nogen der har en færdig algoritme? Det er næsten
underordnet hvilket sprog den er skrevet i, men jeg arbejder mest
med C-lignende sprog.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Hans Kjærgaard
2012-09-10 22:46:50 UTC
Permalink
Mener at man kigger efter hvor torsdagen (i du uge der ligger i
årsskiftet) er, er den i det nye år er det uge et, er den i det gamle
år er det først den følgende uge der er uge et.


/Hans


On Tue, 11 Sep 2012 00:11:05 +0200, Bertel Lund Hansen
Post by Bertel Lund Hansen
Hej alle
Jeg skal bruge en funktion der returnerer det korrekte ugenummer
når jeg kender datoen. Python har godt nok en indbygget mulighed,
All days in a new year preceding the first Monday
are considered to be in week 0.
Er der nogen der har en færdig algoritme? Det er næsten
underordnet hvilket sprog den er skrevet i, men jeg arbejder mest
med C-lignende sprog.
Bertel Lund Hansen
2012-09-11 00:14:40 UTC
Permalink
Post by Hans Kjærgaard
Mener at man kigger efter hvor torsdagen (i du uge der ligger i
årsskiftet) er, er den i det nye år er det uge et, er den i det gamle
år er det først den følgende uge der er uge et.
Ja, men problemet er så at finde ud af ugenummeret hvis det ikke
er uge 1.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Hans Kjærgaard
2012-09-11 05:19:25 UTC
Permalink
On Tue, 11 Sep 2012 02:14:40 +0200, Bertel Lund Hansen
Post by Bertel Lund Hansen
Post by Hans Kjærgaard
Mener at man kigger efter hvor torsdagen (i du uge der ligger i
årsskiftet) er, er den i det nye år er det uge et, er den i det gamle
år er det først den følgende uge der er uge et.
Ja, men problemet er så at finde ud af ugenummeret hvis det ikke
er uge 1.
Det burde være simpel regning når man først har fået placeret hvor uge
et starter.


/Hans
Bertel Lund Hansen
2012-09-11 07:06:50 UTC
Permalink
Post by Hans Kjærgaard
Post by Bertel Lund Hansen
Ja, men problemet er så at finde ud af ugenummeret hvis det ikke
er uge 1.
Det burde være simpel regning når man først har fået placeret hvor uge
et starter.
Den foregående uge kan være 52 eller 53, og hvis nogen lå med en
færdig rutine, så kunne jeg spare mig det mas.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Andreas Andersen
2012-09-11 07:51:38 UTC
Permalink
Post by Bertel Lund Hansen
Post by Hans Kjærgaard
Post by Bertel Lund Hansen
Ja, men problemet er så at finde ud af ugenummeret hvis det ikke
er uge 1.
Det burde være simpel regning når man først har fået placeret hvor uge
et starter.
Den foregående uge kan være 52 eller 53, og hvis nogen lå med en
færdig rutine, så kunne jeg spare mig det mas.
Virker det jeg sendte ikke? Nu har jeg lige hurtigt lært mig lidt Python
og med en online-fortolker, viser dette fejlen og fikset:

import datetime
print datetime.date(2011, 9, 11).isocalendar()[1]
print datetime.date(2011, 9, 11).strftime("%U")
--
Andreas
Andreas Andersen
2012-09-11 15:29:43 UTC
Permalink
Post by Andreas Andersen
Virker det jeg sendte ikke? Nu har jeg lige hurtigt lært mig lidt Python
import datetime
print datetime.date(2011, 9, 11).isocalendar()[1]
print datetime.date(2011, 9, 11).strftime("%U")
Jeg er ret sikker på at løsningen jeg angiver, er den rigtige, men jeg
har en mistanke om at jeg er havnet i Bertels killfilter. Det er lidt
fjollet med en egen implementation hvis det findes indbygget i Python,
så hvis nogen vil hjælpe ham, kan de evt. citere mit indlæg.
--
Andreas
Anders Wegge Keller
2012-09-11 17:08:07 UTC
Permalink
Post by Andreas Andersen
Post by Andreas Andersen
Virker det jeg sendte ikke? Nu har jeg lige hurtigt lært mig lidt Python
import datetime
print datetime.date(2011, 9, 11).isocalendar()[1]
print datetime.date(2011, 9, 11).strftime("%U")
Jeg er ret sikker på at løsningen jeg angiver, er den rigtige, men jeg
har en mistanke om at jeg er havnet i Bertels killfilter. Det er lidt
fjollet med en egen implementation hvis det findes indbygget i Python,
så hvis nogen vil hjælpe ham, kan de evt. citere mit indlæg.
Det kan også være at Bertel gerne vil lave sin egen implementation,
for derigennem at forstå matematikken bedre.
--
/Wegge

Leder efter redundant peering af dk.*,linux.debian.*
Bertel Lund Hansen
2012-09-11 20:34:48 UTC
Permalink
Post by Anders Wegge Keller
Post by Andreas Andersen
import datetime
print datetime.date(2011, 9, 11).isocalendar()[1]
print datetime.date(2011, 9, 11).strftime("%U")
Det kan også være at Bertel gerne vil lave sin egen implementation,
for derigennem at forstå matematikken bedre.
Nej, det var ikke formålet. Jeg kender kun 'almindelig
programmering' med Python og vil gerne lære de indbyggede
funktioner og metoder at kende. Jeg har nu benyttet den fidus som
Andreas Andersen angav. Den løser mit problem.

Som jeg har skrevet før, er manualen ikke nem at finde rundt i
(for mig i hvert fald) hvis man leder efter en indbygget funktion
der skal kunne noget bestemt.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Andreas Andersen
2012-09-11 05:29:22 UTC
Permalink
Post by Bertel Lund Hansen
Hej alle
Jeg skal bruge en funktion der returnerer det korrekte ugenummer
når jeg kender datoen. Python har godt nok en indbygget mulighed,
All days in a new year preceding the first Monday
are considered to be in week 0.
Det ugenummer du vil have fat i hedder ISO-ugenummer efter en eller
anden ISO-standard. Jeg har ikke en dyt forstand på Python, men hvis man
googler Python og ISO weeknumber får man
http://docs.python.org/library/datetime.html - hvor der står at
datetime.isocalendar() returnerer ISO-ugenummeret.
--
Andreas
JHB
2012-09-11 06:32:47 UTC
Permalink
Post by Bertel Lund Hansen
Hej alle
Jeg skal bruge en funktion der returnerer det korrekte ugenummer
når jeg kender datoen. Python har godt nok en indbygget mulighed,
All days in a new year preceding the first Monday
are considered to be in week 0.
Er der nogen der har en færdig algoritme? Det er næsten
underordnet hvilket sprog den er skrevet i, men jeg arbejder mest
med C-lignende sprog.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Hej Bertel.

Her er en funktion som jeg bruger, der både returnere uge nummeret og året hvor uge nummeret tilhører. Funktionen er skrevet i VBA.

Mvh
Jørn

Function WeekNrAndYear(InputDate As Long) As String
'Denne funktion erstatter den indbyggede FORMAT-funktion for ugenumre da
'Format(En_dato, "ww", vbMonday, vbFirstFourDays), ikke returnere de korrekte uger prøv f.eks. 31-12-2007
'Her returneres uge nr. 53 - det skal være uge nr. 1
Dim a As Integer, B As Integer, C As Long, D As Integer
WeekNrAndYear = 0
If InputDate < 1 Then Exit Function
a = Weekday(InputDate, 1)
B = Year(InputDate + ((8 - a) Mod 7) - 3)
Aar = B
C = DateSerial(B, 1, 1)
D = (Weekday(C, 1) + 1) Mod 7
WeekNrAndYear = Format(CStr(Int((InputDate - C - 3 + D) / 7) + 1), "00") & "-" & CStr(Aar)
End Function
Bertel Lund Hansen
2012-09-11 07:13:29 UTC
Permalink
Post by JHB
Her er en funktion som jeg bruger, der både returnere uge
nummeret og året hvor uge nummeret tilhører. Funktionen er
skrevet i VBA.
Tak for det, men den kalder nogle specielle VBA-funktioner, så
det siger mig ikke så meget.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Bertel Lund Hansen
2012-09-11 08:17:55 UTC
Permalink
Post by Bertel Lund Hansen
Jeg skal bruge en funktion der returnerer det korrekte ugenummer
Jeg fandt selv en generel beskrivelse:

http://www.tondering.dk/claus/cal/week.php

Se næstsidste afsnit.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Bertel Lund Hansen
2012-09-11 08:52:38 UTC
Permalink
Post by Bertel Lund Hansen
http://www.tondering.dk/claus/cal/week.php
Men den er ikke enig med PHP's rutine.

Her er min uforenklede Python-implementation:

def week_number (year,month,day):
if month<3:
a=year-1
b=a/4-a/100+a/400
c=(a-1)/4-(a-1)/100+(a-1)/400
s=b-c
e=0
f=day-1+31*(month-1)
else:
a=year
b=a/4-a/100+a/400
c=(a-1)/4-(a-1)/100+(a-1)/400
s=b-c
e=s+1
f=day+(153*(month-3)+2)/5+58+s

g=(a+b)%7
d=(f+g-e)%7
n=f+3-d

if n<0:
return 53-(g-5)/5
elif n>364+s:
return 1
else:
return n/7+1

PHP er enig med min Android app.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Bertel Lund Hansen
2012-09-11 11:32:27 UTC
Permalink
Post by Bertel Lund Hansen
Men den er ikke enig med PHP's rutine.
return 53-(g-5)/5
Det skal være
Post by Bertel Lund Hansen
return 53-(g-s)/5
altså lille S i stedet for 5.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Uffe Kousgaard
2012-09-18 05:41:25 UTC
Permalink
Post by Bertel Lund Hansen
All days in a new year preceding the first Monday
are considered to be in week 0.
Hvor har du fundet den standard?
Erik Nielsen
2012-09-20 11:01:34 UTC
Permalink
Post by Uffe Kousgaard
Post by Bertel Lund Hansen
All days in a new year preceding the first Monday
are considered to be in week 0.
Hvor har du fundet den standard?
Den gælder ikke i Danmark. Der er ingen uge 0. Den i Danmark gældende
standatd er, at den første uge der har 4 eller flere dage i det nye år,
er uge 1.
Bertel Lund Hansen
2012-09-20 11:52:48 UTC
Permalink
Post by Uffe Kousgaard
Post by Bertel Lund Hansen
All days in a new year preceding the first Monday
are considered to be in week 0.
Hvor har du fundet den standard?
Jeg citerede Pythons manual:

http://docs.python.org/library/datetime.html#module-datetime

Se i den lilla oversigt allernederst under %U og %W.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Uffe Kousgaard
2012-09-21 15:36:30 UTC
Permalink
Men det har jo ikke noget med dansk standard at gøre, som du skrev i dit
første indlæg.
Bertel Lund Hansen
2012-09-21 18:49:52 UTC
Permalink
Post by Uffe Kousgaard
Men det har jo ikke noget med dansk standard at gøre, som du skrev i dit
første indlæg.
Korrekt. Det var sådan set derfor jeg havde et problem.
--
Bertel
http://bertel.lundhansen.dk/ http://fiduso.dk/
Uffe Kousgaard
2012-09-24 08:57:07 UTC
Permalink
"Bertel Lund Hansen" <***@lundhansen.dk> wrote in message
news:505cb6a0$0$283
Post by Bertel Lund Hansen
Korrekt. Det var sådan set derfor jeg havde et problem.
Jeg opfattede dit oprindelige som, at det var dansk standard du forklarede
med den engelske tekst. Nu kan jeg godt se, at det var Pythons
implementering du havde kopieret ind.

Derfor spørgsmålet om, hvor du havde fundet denne danske standard....
Loading...