Domanda

Ho questo codice che funziona in FreePascal sotto Windows e la necessità di tradurre in Linux, ma sto completamente perso sul valore del fuso orario Bias:

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;
È stato utile?

Soluzione

Questo ragazzo ha la risposta: http: / /www.mail-archive.com/fpc-pascal@lists.freepascal.org/msg08467.html

Quindi, ti consigliamo di aggiungere la clausola uses:

uses unix,sysutils,baseunix

variabili per tenere il tempo / fuso orario:

 var
   timeval: TTimeVal;
   timezone: PTimeZone;

.. e ottenere il 'minuti ad ovest'.

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

Altri suggerimenti

Non ho fatto un sacco di pascal ultimamente, quindi questi è solo un accenno, piuttosto che una risposta completa.

Ma controllare il vostro compilatore come chiamare e il collegamento c-codice. Quindi è possibile utilizzare time.h simile come in questo C-esempio:

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

Il programma emette qualcosa come

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

È possibile utilizzare sprintf invece di printf di "stampare" in un array di caratteri, e strftime per dare una stringa di formato come simile a 'ddd, dd mmm yyyy hh: nn: ss' (probabilmente "% A,% d % b% Y% H:% M:% S ") e utilizzare il 'int fuso orario lungo' variabile globale invece di 'LocalTimeZone.Bias'

.

Credo che l'ostacolo principale è quello di capire come chiamare il c-codice. Forse si può anche utilizzare time.h direttamente da Pascal, vorrei indagare su questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top