Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Uhrzeit eines Unix-Timestamps ändern? (https://www.delphipraxis.net/193682-uhrzeit-eines-unix-timestamps-aendern.html)

Glados 29. Aug 2017 11:25

Uhrzeit eines Unix-Timestamps ändern?
 
So langsam habe ich die Nase voll von Datums- und Zeitangaben.

Gegeben ist ein Unix-Timestamp. Ein Datum und eine Uhrzeit.
Das Datum möchte ich behalten, aber die Zeit verändern.

Wie genau geht das von statten?

himitsu 29. Aug 2017 11:35

AW: Uhrzeit eines Unix-Timestamps ändern?
 
MOD und DIV?
x Millisekunden am Tag, da kann man ganz leicht beide Teile trennen und nach dem Ändern wieder zusammensetzen.

Oder du wandelst das in ein Zeitformat um, was sich einfacher ändern lässt und nachher wieder zurück.
z.B. TSystemTime wo jeder Teil in einer einzelnen Variable in einem Record liegt (MSec, Sec, Min, Hour, Day, Mon und Year)
oder TDateTime mit den Änderungs-Prozeduren der DateUtils

Der schöne Günther 29. Aug 2017 11:44

AW: Uhrzeit eines Unix-Timestamps ändern?
 
Wie der schlaue Mann über mir sagt: Das Umwandeln in die gewohnten Formate der Sprache/Bibliothek sollte immer der erste Schritt sein um damit zu arbeiten.

Delphi-Quellcode:
uses System.DateUtils, System.SysUtils;

const
   unixTimestamp = 1504003327;
var
   asDateTime: TDateTime;
begin
   asDateTime := UnixToDateTime(unixTimestamp);
   WriteLn( 'Vorher: ' + DateTimeToStr(asDateTime) );

   asDateTime := RecodeTime(asDateTime, 17, 00, 00, 000);
   WriteLn( 'Nachher: ' + DateTimeToStr(asDateTime) );

   ReadLn;
end.

Glados 29. Aug 2017 12:13

AW: Uhrzeit eines Unix-Timestamps ändern?
 
Danke für eure Hilfe. Ich habe das folgendermaßen gelößt, um doppelten Code zu vermeiden.
Die Parameter (Integer und String) sind für mich genau passend, da ich keine TDateTime-Werte übergeben möchte (was woanders wieder mehr doppelten Code verursachen würde):

Delphi-Quellcode:
function ChangeTime(const Timestamp: Integer; const NewTime: string): Integer;
var
 aNewTime, aDateTime: TDateTime;
begin
 aNewTime := StrToTime(NewTime);
 aDateTime := UnixToDateTime(Timestamp);

 aDateTime := RecodeTime(aDateTime, System.DateUtils.HourOf(aNewTime), System.DateUtils.MinuteOf(aNewTime), System.DateUtils.SecondOf(aNewTime), 000);

 Result := DateTimeToUnix(aDateTime);
end;
Delphi-Quellcode:
procedure Test;
begin
 unixTimestamp := ChangeTime(DateTimeToUnix(IncDay(Date)), '17:00:00');
 // bzw
 unixTimestamp := TDateUtils.ChangeTime(1504003327, '17:00:00');
end;

Sherlock 29. Aug 2017 12:18

AW: Uhrzeit eines Unix-Timestamps ändern?
 
Zitat:

Zitat von Glados (Beitrag 1379810)
Die Parameter (Integer und String) sind für mich genau passend, da ich keine TDateTime-Werte übergeben möchte (was woanders wieder mehr doppelten Code verursachen würde)

Hmmm, also ich verwende immer den Datentyp, der am nähesten meinen Daten entspricht. Ich glaube das gehört zur Datenhygiene. Du kommst sicherlich auch nicht auf die Idee eine ganze Zahl als String zu speichern und weiter zu verarbeiten, oder?

Sherlock

Glados 29. Aug 2017 12:28

AW: Uhrzeit eines Unix-Timestamps ändern?
 
Zitat:

Hmmm, also ich verwende immer den Datentyp, der am nähesten meinen Daten entsprich
Und genau das tue ich in meinem Fall.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz