Zeitdifferenz berechnen
Zeitdifferenz berechnen
xxx
Zuletzt geändert von Little John am 07.05.2010 01:33, insgesamt 1-mal geändert.
Mal ne Frage, wäre das hier nicht eleganter:
Sowas über Static zu lösen sehe ich selten.
Code: Alles auswählen
; Zeitpunkt
Structure DateTime
year.w
month.b
day.b
hour.b
min.b
sec.b
EndStructure
; Zeitspanne
Structure TimeSpan
days.i
hours.b
minutes.b
seconds.b
EndStructure
Procedure.i TimeDiff (*begin.DateTime, *finish.DateTime)
; in : begin : Anfangszeitpunkt
; finish: Endzeitpunkt
; out: Pointer auf Zeitspanne zwischen 'begin' und 'finish'
; (in Tagen, Stunden, Minuten, Sekunden)
Protected b, f, elapsed
*diff.TimeSpan=HeapAlloc_(GetProcessHeap_(),$00000008 ,SizeOf(TimeSpan))
With *begin
b = Date(\year, \month, \day, \hour, \min, \sec)
EndWith
With *finish
f = Date(\year, \month, \day, \hour, \min, \sec)
EndWith
elapsed = f - b
With *diff
\seconds = elapsed % 60
elapsed = Int(elapsed/60)
\minutes = elapsed % 60
elapsed = Int(elapsed/60)
\hours = elapsed % 60
\days = Int(elapsed/24)
EndWith
ProcedureReturn *diff
EndProcedure
;-- Demo
Define start.DateTime, ende.DateTime, *differenz.TimeSpan
With start
\year = 2006
\month = 3
\day = 20
\hour = 22
\min = 0
\sec = 0
EndWith
With ende
\year = 2009
\month = 3
\day = 21
\hour = 6
\min = 30
\sec = 0
EndWith
*differenz = TimeDiff(start, ende)
Debug "Die Nachtschicht dauerte:"
With *differenz
Debug Str(\days) + " Tage, " + Str(\hours) + " Stunden, " + Str(\minutes) + " Minuten, " + Str(\seconds) + " Sekunden."
EndWith
Danke, dass ich erstmal selbst suchen darf, wo der Unterschied ist ...X0r hat geschrieben:Mal ne Frage, wäre das hier nicht eleganter:
... und zwar hier:
Little John
Code: Alles auswählen
Static diff.TimeSpan
Code: Alles auswählen
*diff.TimeSpan=HeapAlloc_(GetProcessHeap_(),$00000008 ,SizeOf(TimeSpan))
Warum soll das eleganter sein? Jedenfalls ist es nicht mehr cross-platform.
Gruß, Little John
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
> Mal ne Frage, wäre das hier nicht eleganter:
Kommt drauf an, wieviel Berechnungen man macht bis der Speicher Weg ist
1: gibts AllocateMemory, dann bleibt es Crossplattform.
2: sollte man, wenn man es so macht, den Speicher auch wieder freigeben.
Kommt drauf an, wieviel Berechnungen man macht bis der Speicher Weg ist

1: gibts AllocateMemory, dann bleibt es Crossplattform.
2: sollte man, wenn man es so macht, den Speicher auch wieder freigeben.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

>sollte man, wenn man es so macht, den Speicher auch wieder freigeben.
Ne, dann kann mans bei dieser Kleinigkeit gleich sein lassen. Außerdem, ein richtiges OS organisiert den Speicher nach Programm-Ende wieder neu..
Heißt nicht, dass man allokierten Speicher nie freigeben sollte, aber bei sowas...
Kommt aber natürlich drauf an, was man mit dieser Funktion alles macht
Ne, dann kann mans bei dieser Kleinigkeit gleich sein lassen. Außerdem, ein richtiges OS organisiert den Speicher nach Programm-Ende wieder neu..
Heißt nicht, dass man allokierten Speicher nie freigeben sollte, aber bei sowas...
Kommt aber natürlich drauf an, was man mit dieser Funktion alles macht

- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Dir ist aber klar, das Du mit jedem Aufruf erneut Speicher reservierst?
Da ist die Lösung mit der Static Variable aber wesentlich eleganter und
performanter.
Da ist die Lösung mit der Static Variable aber wesentlich eleganter und
performanter.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
>> das Du mit jedem Aufruf erneut Speicher reservierst?
muss ihm wohl entgangen sein.... sträfliches Leak dieses...
Static ist eine ganz nette Sache für sowas, vermeidet Global, damit keine andere Routine drin Rumpfuschen kann.
Man kann natürlich auch Mem allocieren, dann braucht man aber den pointer dahin static, kommt also fast aufs selbe raus.
muss ihm wohl entgangen sein.... sträfliches Leak dieses...
Static ist eine ganz nette Sache für sowas, vermeidet Global, damit keine andere Routine drin Rumpfuschen kann.
Man kann natürlich auch Mem allocieren, dann braucht man aber den pointer dahin static, kommt also fast aufs selbe raus.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.