2009-06-07 3 views
0

Ich habe diesen Code, der in Freepascal unter Windows funktioniert und müssen es Linux zu übersetzen, aber ich bin ganz auf die Zeitzone Bias Wert verloren:Zeitzone Code Übersetzung von Windows auf Linux in Freepascal

function DateTimeToInternetTime(const aDateTime: TDateTime): String; 
{$IFDEF WIN32} 
var 
    LocalTimeZone: TTimeZoneInformation; 
{$ENDIF ~WIN32} 
begin 
{$IFDEF WIN32} 
    // eg. Sun, 06 Nov 1994 08:49:37 GMT RFC 822, updated by 1123 
    Result := FormatDateTime('ddd, dd mmm yyyy hh:nn:ss', aDateTime); 
    // Get the Local Time Zone Bias and report as GMT +/-Bias 
    GetTimeZoneInformation(LocalTimeZone); 
    Result := Result + 'GMT ' + IntToStr(LocalTimeZone.Bias div 60); 
{$ELSE} 
    // !!!! Here I need the above code translated !!!! 
    Result := 'Sat, 06 Jun 2009 18:00:00 GMT 0000'; 
{$ENDIF ~WIN32} 
end; 

Antwort

4

Dieser Typ hat die Antwort: http://www.mail-archive.com/[email protected]/msg08467.html

So wollen Sie die uses-Klausel hinzuzufügen:

uses unix,sysutils,baseunix 

Variablen die Zeit/Zeitzone zu halten:

var 
    timeval: TTimeVal; 
    timezone: PTimeZone; 

.. und nimm die 'Minuten West'.

{$ELSE} 
    Result := FormatDateTime('ddd, dd mmm yyyy hh:nn:ss', aDateTime); 
    TimeZone := nil; 
    fpGetTimeOfDay (@TimeVal, TimeZone); 
    Result := Result + 'GMT ' + IntToStr(timezone^.tz_minuteswest div 60); 
{$ENDIF ~WIN32} 
+0

Danke Kumpel, du bist ein Star. Du hast die Beute;) –

+0

woo hoo! Die Online-Referenz ist hier: http://www.freepascal.org/docs-html/rtl/unix/fpgettimeofday.html – russau

+0

So bekommt er die Beute für die Verknüpfung mit meiner Antwort? –

0

Ich habe in letzter Zeit nicht viel Pascal gemacht, also sind dies nur ein Hinweis und keine vollständige Antwort.

Aber überprüfen Sie Ihren Compiler, wie C-Code aufrufen und verknüpfen. Dann können Sie time.h ähnlich wie in diesem C-Beispiel verwenden:

/* localtime example */ 
#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 
    printf ("Current local time and date: %s", asctime (timeinfo)); 

    return 0; 
} 

Dieses Programm führt zu dieser Ausgabe wie

 
    Current local time and date: Sat Jun 06 18:00:00 2009 

Sie sprintf statt printf verwenden kann, um „Druck“ in eine Reihe von Zeichen und strftime, um einem Formatstring zu geben, wie ähnlich 'ddd, tt mmm yyyy hh: nn: ss' (wahrscheinlich "% a,% d% b% Y% H:% M:% S") und das ' long int timezone 'globale Variable anstelle von' LocalTimeZone.Bias '.

Ich denke, die Haupthürde ist herauszufinden, wie der C-Code aufgerufen wird. Vielleicht kannst du sogar time.h direkt von Pascal verwenden, das würde ich untersuchen.

+0

Dies kann eine Antwort sein. Ich untersuche dies unter FreePascal und akzeptiere oder degradiere deine Antwort. –

Verwandte Themen