2009-06-07 4 views
0

J'ai ce code qui fonctionne dans FreePascal sous Windows et la nécessité de le traduire à Linux, mais je suis complètement perdu sur la valeur Bias Fuseau horaire:Time Zone traduction de code de Windows à Linux dans 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; 

Répondre

4

Ce mec a la réponse: http://www.mail-archive.com/[email protected]/msg08467.html

donc vous voulez ajouter la clause uses:

uses unix,sysutils,baseunix 

variables pour tenir le temps/fuseau horaire:

var 
    timeval: TTimeVal; 
    timezone: PTimeZone; 

.. et obtenez les minutes à l'ouest.

{$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

Merci mon pote, tu es une star. Vous avez le butin;) –

+0

woo hoo! La référence en ligne est ici: http://www.freepascal.org/docs-html/rtl/unix/fpgettimeofday.html – russau

+0

Donc, il obtient le butin pour lier à ma réponse? –

0

Je n'ai pas fait beaucoup de pascal ces derniers temps, donc ce n'est qu'un indice, plutôt qu'une réponse complète.

Mais vérifiez votre compilateur comment appeler et lier le code-c. Ensuite, vous pouvez utiliser time.h similaire comme dans ce C-exemple:

/* 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; 
} 

Ce programme quelque chose de sortie comme

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

Vous pouvez utiliser sprintf au lieu de printf pour « imprimer » dans un tableau de caractères, et strftime pour donner une chaîne de format similaire à 'ddd, jj mmm aaaa hh: nn: ss' (probablement "% a,% d% b% Y% H:% M:% S") et utilisez le ' variable globale long int timezone au lieu de 'LocalTimeZone.Bias'.

Je suppose que l'obstacle principal est de comprendre comment appeler le code-c. Peut-être que vous pouvez même utiliser time.h directement à partir de pascal, je voudrais enquêter sur cela.

+0

Ceci peut être une réponse. Je vais étudier cela sous FreePascal et ensuite accepter ou rétrograder votre réponse. –

Questions connexes