CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TIMESTAMP convert

TIMESTAMP convert

dział ogólny

TIMESTAMP convert

Nowy postprzez Bert1223 » czwartek, 29 lipca 2010, 09:11

Witam, jestem w trakcie pisania convertera, plik który przerabiam zawiera datę w formie TIMESTAMP, czy jest jakaś funkcja która przerobi mi tą datę na YYYY-MM-DD HH:SS?
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    Windows 7Chrome

Re: TIMESTAMP convert

Nowy postprzez Corvis » czwartek, 29 lipca 2010, 09:18

Kod: Zaznacz cały
TDateTime dt = TimeStampToDateTime(ts);
String data = FormatDateTime("YYYY-MM-DD HH:SS",dt);



Chyba coś takiego, nie mogę teraz sprawdzić



Edit.

Pokaż, jak ta data wygląda w pliku.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TIMESTAMP convert

Nowy postprzez Cyfrowy Baron » czwartek, 29 lipca 2010, 12:13

Wbrew pozorom rozwiązanie nie jest proste:

KOD cpp:     UKRYJ  
 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:

KOD cpp:     UKRYJ  
 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:

KOD cpp:     UKRYJ  
 TTimeStamp timeStamp = MSecsToTimeStamp(1285668000);


Dlatego poszedłem nieco inną drogą i postanowiłem użyć funkcji UnixToDateTime zamiast TimeStampToDateTime:

KOD cpp:     UKRYJ  
 __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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: TIMESTAMP convert

Nowy postprzez Bert1223 » czwartek, 29 lipca 2010, 15:42

czy możesz podać bibliotekę dla UnixToDateTime?
Przepraszam za pytanie, sam na nie odpowiem w ramach rekompensaty :)
#include <DateUtils.hpp>
Avatar użytkownika
Bert1223
Bladawiec
Bladawiec
 
Posty: 45
Dołączył(a): czwartek, 15 października 2009, 02:41
Podziękował : 6
Otrzymał podziękowań: 0
    Windows 7Chrome

Re: TIMESTAMP convert

Nowy postprzez Cyfrowy Baron » czwartek, 29 lipca 2010, 21:24

Podaję jeszcze rozwiązanie dla funkcji TimeStampToDateTime:

KOD cpp:     UKRYJ  
 double tUnix = 1285668000; // data i czas w systemie UNIX: 2010-09-28 10:00

 int day = tUnix  / (60 * 60 * 24) + 719163;
 /* 60 sek * 60 min. * 24 godz. +
    liczba dni od daty 0000-1-1 do epoki UNIX 1970-1-1, czyli 719163 */

 int sec = ((int)tUnix  % 86400) * 1000;
 /*  86400 =  60 * 60 * 24;
      modulo z wartości tUnix / 86400 pomnożona przez 1000 milisekund */


 TTimeStamp TS;
 TS.Date = day;
 TS.Time = sec;

 TDateTime dateTime;

 dateTime = TimeStampToDateTime(TS);

 String resultDT = FormatDateTime("yyyy-mm-dd hh:nn", dateTime);

 ShowMessage(resultDT);
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 4 gości