![]() |
UnixTime in ein Datum und in eine Zeit umwandeln
Diese beiden Funktionen wandeln einen UnixTimeStamp in ein Datums- bzw. in einen Zeit-String um ohne Verwendung der Unit SysUtils.
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Procedure : UnixTimeToDateString - Author : Michael Puff Date : 2003-07-05 Purpose : Converts a Unixtimestamp to local systemtime -----------------------------------------------------------------------------} function UnixTimeToDateString(i: PDWORD): string; var umt: int64; st: TSystemTime; ft: TFileTime; li: ULARGE_INTEGER; buf: array[0..255] of char; begin result := ''; if i = nil then exit; umt := i^; st.wYear := 1970; st.wMonth := 1; st.wDayOfWeek := 0; st.wDay := 1; st.wHour := 0; st.wMinute := 0; st.wSecond := 0; st.wMilliseconds := 0; SystemTimeToFileTime(st, ft); li.QuadPart := (umt * 10000000) + ULARGE_INTEGER(ft).QuadPart; ft.dwLowDateTime := li.LowPart; ft.dwHighDateTime := li.HighPart; FileTimeToSystemTime(ft, st); ZeroMemory(@buf, sizeof(buf)); if (GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, @st, nil, buf, sizeof(buf)) > 0) then Result := string(buf); end;
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Procedure : UnixTimeToTimeString - Author : Michael Puff Date : 2003-07-05 Purpose : Converts a Unixtimestamp to local systemtime -----------------------------------------------------------------------------} function UnixTimeToTimeString(i: PDWORD): string; var umt: int64; st: SystemTime; ft: FileTime; li: ULARGE_INTEGER; buf: array[0..255] of char; begin result := ''; if i = nil then exit; umt := i^; st.wYear := 1970; st.wMonth := 1; st.wDayOfWeek := 0; st.wDay := 1; st.wHour := 0; st.wMinute := 0; st.wSecond := 0; st.wMilliseconds := 0; SystemTimeToFileTime(st, ft); li.QuadPart := (umt * 10000000); ft.dwLowDateTime := li.LowPart; ft.dwHighDateTime := li.HighPart; FileTimeToSystemTime(ft, st); ZeroMemory(@buf, sizeof(buf)); if (GetTimeFormat(LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, @st, nil, buf, sizeof(buf)) > 0) then Result := string(buf); end; |
Warum so kompliziert (i.e. warum vorher extra ausrechnen wann der XX.YY.1970 war)?
Eugen und meinereiner haben irgendwann malunabhängig voneinander ca folgendes geschrieben. Wo ich das jetzt zu stehen habe, weiß ich aber net mehr :) ... Zumindest siehste ja die fette Konstante. Umgekehrt wäre analog zu berechnen. Ich werde nochmal schauen, ob ich da noch ne Version hinbekomme, die mit einer gestrippten Systemunit funzt (i.e. keine Int64 Unterstützung ;))
Delphi-Quellcode:
Nachtrag: Daß meine Func nicht einen String ausgibt ist mir klar ... aber das ist dann auch wirklich nicht mehr so schwer :)
function UnixTimeToFileTime(t: LongWord): FILETIME;
var ll: int64; begin ll := (Int64(t) * 10000000) + int64(116444736000000000); result.dwLowDateTime := LongWord(ll); result.dwHighDateTime := ll shr 32; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz