TDateTime in Visual C++ einlesen



  • Hallo,

    ich muss ein TDateTime (Delphi bzw. C++ Builder) in ein Visual C++ Programm einlesen. Gibt es eine allgemein verfügbare Funktion um den TDateTime Wert als Zeichenkette ausgeben zu können?

    Angeblich soll es in Excel ein kompatibles Datums-/Zeitwert geben. Da müsste es in VC doch Funktionen geben die damit umgehen können? Oder gibt es Open Source Quelltexte dafür? Weiss jemand hier etwas zu diesem Thema?

    Bin für jeden Tipp dankbar
    Bernd



  • Habe selbst eine Lösung gefunden. Der Trick besteht darin, den TDateTime (double) Wert in ein FILETIME (__int64) Wert umzurechnen. Danach können alle für FILETIME verfügbaren Funktionen angewendet werden. Hier die Umwandlung nach SYSTEMTIME, lokale Zeit berechnen und umwandeln in eine Zeichenkette.

    #include <time.h>
    #include <math.h>
    
    // DateTime (UTC-Wert) 
    BOOL LocalTimeStrFromDateTime(double DateTime, char *buffer, int dstSize)
    { 
      int i;
      SYSTEMTIME stUTC, stLocal;
      __int64 ftime = (__int64)floor(DateTime*10000000*60*60*24)+94353120000000000;
      if ( !FileTimeToSystemTime((FILETIME *)&ftime, &stUTC) )
        return false;
      if ( !SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal) )
        return false;
      GetDateFormatA(LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE | DATE_SHORTDATE,
                    &stLocal, NULL, buffer, dstSize);
      strcat_s(buffer, dstSize, " ");
      i = (int)strlen(buffer);
      GetTimeFormatA(LOCALE_USER_DEFAULT, LOCALE_NOUSEROVERRIDE | TIME_NOTIMEMARKER
                   | TIME_FORCE24HOURFORMAT, &stLocal, NULL, &buffer[i], dstSize-i);
      return true;
    }
    

Anmelden zum Antworten