/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
Tælle baglæns dag for dag ?
Fra : Christian B. Andrese~


Dato : 18-06-07 12:27

Hej allesammen.

Jeg har brug for en rutine i C som tæller baglæns dag for dag.
Den skal selvfølgelig kunne tælle rigtigt, både de måneder med
30 og 31 dage og februar rigtigt om der er skudår eller ej.

Findes der en snedig måde at gøre dette på ?

--
Christian......http://www.yee-haw.dk - Ønskes:
- En ny forbindelse over Randers Fjord
- Udvidelse af E 45 motorvejen mellem Randers og Kolding til seks spor
- En fast forbindelse over Kattegat til hurtigtog og biler


 
 
Jakob Bøhm (20-06-2007)
Kommentar
Fra : Jakob Bøhm


Dato : 20-06-07 10:30

Christian B. Andresen wrote:
> Hej allesammen.
>
> Jeg har brug for en rutine i C som tæller baglæns dag for dag.
> Den skal selvfølgelig kunne tælle rigtigt, både de måneder med
> 30 og 31 dage og februar rigtigt om der er skudår eller ej.
>
> Findes der en snedig måde at gøre dette på ?
>
Den letteste løsning er at bruge en biblioteksfunktion som omregner
mellem vores sære kalender og et rent tal, det tal kan du så tælle op og
ned så let som ingenting og bagefter bruge den modsatte
biblioteksfunktion til at få resultatet som en dato.

Der er mange af den slags funktioner i omløb, men funktionerne i
<time.h> kan sagtens klare det og er en del af alle moderne C og C++
compilere.

Disse funktioner omregner til og fra taltypen time_t som tæller i
sekunder, hvis du ikke skal bruge klokkeslettet kan du bare sætte det
til kl. 12:00 middag for færrest afrundingsfejl.

Bemærk dog følgende begrænsninger:

På mange 32-bit maskiner virker funktionerne kun rigtigt fra
1970-01-01T00:00:00 UTC til engang i 2038, da de bruger en signed 32 bit
(dvs. reelt kun 31 bit) sekundtæller. Visual Studio 2005 er dog gået
over til en 63 bit tæller, men Visual Studio 6 fra 1998 brugte 31 bit.
På Linux er time_t 63 bit på 64 bit Linux, men 31 bit på 32 bit Linux.

I ældre DOS/OS2/Windows-compilere (herunder Visual Studio 6 og Borland C
5.2) bruges noget meget upålidelig kode til håndtering af tidszoner og
sommertid, for rene datoberegninger kan dette omgås ved kun at bruge de
funktioner der hedder noget med GMT.

På gamle Mac-systemer går der rygter om at time_t blev regnet fra en
anden dato end 1970-01-01.

--
Jakob Bøhm, M.Sc.Eng. * jb@danware.dk * direct tel:+45-45-90-25-33
Danware Data A/S * Bregnerodvej 127 * DK-3460 Birkerod * DENMARK
http://www.netop.com * tel:+45-45-90-25-25 * fax tel:+45-45-90-25-26
Information in this mail is hasty, not binding and may not be right

Christian B. Andrese~ (20-06-2007)
Kommentar
Fra : Christian B. Andrese~


Dato : 20-06-07 10:45

On 20 Jun., 11:30, Jakob Bøhm <j...@danware.dk> wrote:
> Christian B. Andresen wrote:
> > Hej allesammen.
>
> > Jeg har brug for en rutine i C som tæller baglæns dag for dag.
> > Den skal selvfølgelig kunne tælle rigtigt, både de måneder med
> > 30 og 31 dage og februar rigtigt om der er skudår eller ej.
>
> > Findes der en snedig måde at gøre dette på ?
>
> Den letteste løsning er at bruge en biblioteksfunktion som omregner
> mellem vores sære kalender og et rent tal, det tal kan du så tælle op og
> ned så let som ingenting og bagefter bruge den modsatte
> biblioteksfunktion til at få resultatet som en dato.
>
> Der er mange af den slags funktioner i omløb, men funktionerne i
> <time.h> kan sagtens klare det og er en del af alle moderne C og C++
> compilere.

Det vil jeg se om jeg har til den compiler jge bruger. Det er en ældre
TopSpeed compiler til EPOC.

> Disse funktioner omregner til og fra taltypen time_t som tæller i
> sekunder, hvis du ikke skal bruge klokkeslettet kan du bare sætte det
> til kl. 12:00 middag for færrest afrundingsfejl.

Det skal jeg ikke.

> Bemærk dog følgende begrænsninger:
>
> På mange 32-bit maskiner virker funktionerne kun rigtigt fra
> 1970-01-01T00:00:00 UTC til engang i 2038, da de bruger en signed 32 bit
> (dvs. reelt kun 31 bit) sekundtæller. Visual Studio 2005 er dog gået
> over til en 63 bit tæller, men Visual Studio 6 fra 1998 brugte 31 bit.
> På Linux er time_t 63 bit på 64 bit Linux, men 31 bit på 32 bit Linux.

Det er en 16 bit maskine, med en ældre compiler.
Det betyder ikke noget med 2038 fejl, da jeg ved med sikkerhed at
produktet er erstattet længe inden.

> I ældre DOS/OS2/Windows-compilere (herunder Visual Studio 6 og Borland C
> 5.2) bruges noget meget upålidelig kode til håndtering af tidszoner og
> sommertid, for rene datoberegninger kan dette omgås ved kun at bruge de
> funktioner der hedder noget med GMT.

Tror jeg ikke er et poblem.

> På gamle Mac-systemer går der rygter om at time_t blev regnet fra en
> anden dato end 1970-01-01.

Er ikke relevant.

--
Christian......http://www.yee-haw.dk - Ønskes:
- En ny forbindelse over Randers Fjord
- Udvidelse af E 45 motorvejen mellem Randers og Kolding til seks spor
- En fast forbindelse over Kattegat til hurtigtog og biler


Christian B. Andrese~ (20-06-2007)
Kommentar
Fra : Christian B. Andrese~


Dato : 20-06-07 11:54

On 20 Jun., 11:30, Jakob Bøhm <j...@danware.dk> wrote:
> Christian B. Andresen wrote:
> > Hej allesammen.
>
> > Jeg har brug for en rutine i C som tæller baglæns dag for dag.
> > Den skal selvfølgelig kunne tælle rigtigt, både de måneder med
> > 30 og 31 dage og februar rigtigt om der er skudår eller ej.
>
> > Findes der en snedig måde at gøre dette på ?
>
> Den letteste løsning er at bruge en biblioteksfunktion som omregner
> mellem vores sære kalender og et rent tal, det tal kan du så tælle op og
> ned så let som ingenting og bagefter bruge den modsatte
> biblioteksfunktion til at få resultatet som en dato.

Det ser ud som om der er nogle biblioteksrutiner jeg kan bruge så
mange tak for hjælpen.

--
Christian......http://www.yee-haw.dk - Ønskes:
- En ny forbindelse over Randers Fjord
- Udvidelse af E 45 motorvejen mellem Randers og Kolding til seks spor
- En fast forbindelse over Kattegat til hurtigtog og biler


Søg
Reklame
Statistik
Spørgsmål : 177564
Tips : 31968
Nyheder : 719565
Indlæg : 6408970
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste