Wbrew pozorom rozwiązanie nie jest proste:
double Ts = 1285668000; // data i czas w systemie UNIX: 2010-09-28 10:00
TTimeStamp timeStamp = MSecsToTimeStamp(Ts);
TDateTime dateTime;
dateTime = TimeStampToDateTime(timeStamp);
String resultDT = FormatDateTime("yyyy-mm-dd hh:nn", dateTime);
Wypróbowałem różne kombinacje,między innymi coś takiego:
double tUnix = 1285668000; // data i czas w systemie UNIX: 2010-09-28 10:00
double T1, T2;
TDateTime dt = EncodeDateTime(1970, 1, 1, 0, 0, 0, 0);
TTimeStamp TS = DateTimeToTimeStamp(dt);
T1 = TimeStampToMSecs(TS);
T2 = T1 - tUnix;
TTimeStamp timeStamp = MSecsToTimeStamp(T2);
TDateTime dateTime;
dateTime = TimeStampToDateTime(timeStamp);
String resultDT = FormatDateTime("yyyy-mm-dd hh:nn", dateTime);
Również bez efektu.
Trudno znaleźć jakieś opracowanie, które by wyjaśniało mechanizm obliczeń. Z tego co wyczytałem zrozumiałem, że czas UNIX jest liczony od daty 1970, 1, 1 0, 0, 0, 0 i wyrażany w sekundach.
Problem stanowi jak sądzę ten fragment kodu:
TTimeStamp timeStamp = MSecsToTimeStamp(1285668000);
Dlatego poszedłem nieco inną drogą i postanowiłem użyć funkcji
UnixToDateTime zamiast
TimeStampToDateTime:
__int64 tUnix = 1285668000; // data i czas w systemie UNIX: 2010-09-28 10:00
TDateTime dateTime;
dateTime = UnixToDateTime(tUnix);
String resultDT = FormatDateTime("yyyy-mm-dd hh:nn", dateTime);
ShowMessage(resultDT);
To oczywiście rozwiązuje problem jednak chętnie bym poznał sposób na funkcję
TimeStampToDateTime.