windows - tid i C ++ beregning

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en tekstfil med poster i den. Jeg skal beslutte, om tiden (som er en del af rekordstrukturen) er mellem 2 gange (lagret i strenge), der repræsenterer det nederste og øvre område.
I filen er tiden repræsenteret i 145540123456, hvilket betyder, at 14 er timen, 55 minutter, 40 sekunder, 123456 - mikrosekunder nøjagtige.


Den øverste og nederste tid, jeg får at afgøre, om den er i intervallet, får jeg det som en streng i samme format for eksempel '093000000000'. Hvordan laver jeg beregningen, skal jeg gøre det med time\_t og tidsbibliotek?


Bemærk: Jeg kan ikke bruge Boost.

Bedste reference


Det format, du angiver, har den simple fordel, at sorteringen af ​​disse tidsstrenge alfanumerisk vil holde dem i den rigtige rækkefølge.


Derfor kan du ved hjælp af strcmp (simpel C-funktion, hvis du bruger null-terminerede char * buffere) eller sammenligningsoperatørerne til std::string tillade dig at bestemme let, hvis en bestemt tidsstreng tilhører et interval.


Disse metoder kan føre til meget få beregninger, hvis for eksempel den første karakter af de strings, du sammenligner, er forskellig, da standardfunktionerne skal være kloge nok til at holde op med at sammenligne strengene, så snart de har bestemt resultatet.

Andre referencer 1


Hvis du ikke subtraherer disse tal, skal du blot kunne sammenligne dem som tal. Den der repræsenterer længere tid vil altid være et større antal også. Dette skyldes, at du har de enheder, der vejer mest i venstre ende (timer), og de enheder, der vejer mindst i højre ende (mikrosekunder), som er det samme system som det normale antal bruger.


Bare konvertere det til usigneret int64 eller noget, ikke bare int, da det bliver overfyldt med et nummer som 145540123456.

Andre referencer 2


I dette tilfælde skal du bare konvertere det til et tal og sammenligne. Dit format sætter de vigtigste cifre til venstre. Dit højest mulige tal er 235,959,999,999, som ikke passer i en usigneret lang.


En simpel måde er at opdele det på HHMMSS og mmmmmm - hvis de første tal er ens, sammenlign det andet.

Andre referencer 3


Den bedste måde (c) at håndtere dato/tid beregninger i C ++ er Boost.Date\_Time biblioteket. [5]


Desværre er dine strenge ikke i noget standardformat. Så du bliver nødt til at analysere dem selv og bruge dette som input til en posix-varighed.


Hvis du ikke kan bruge et bibliotek, kan du simpelthen definere en struktur med time, minutter, sekunder og microseconds medlemmer og operator<.
Derefter skal du blot analysere indgangen i disse strukturer og sammenligne dem.


En anden mulighed er at konvertere hver varighed i mikrosekunder. Sammenligningen bliver da trivial.