0

Windows の FreePascal で動作するこのコードがあり、それを Linux に変換する必要がありますが、タイム ゾーン バイアスの値が完全にわかりません。

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;
4

2 に答える 2

4

この男が答えを持っています: http://www.mail-archive.com/fpc-pascal@lists.freepascal.org/msg08467.html

したがって、uses 句を追加する必要があります。

uses unix,sysutils,baseunix

時間/タイムゾーンを保持する変数:

 var
   timeval: TTimeVal;
   timezone: PTimeZone;

..そして「西の分」を取得します。

{$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}
于 2009-06-15T13:26:45.583 に答える
0

私は最近パスカルをあまりしていませんので、これらは完全な答えではなく、単なるヒントです。

ただし、cコードを呼び出してリンクする方法をコンパイラーで確認してください。次に、このCの例のようにtime.hを使用できます。

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

このプログラムは次のようなものを出力します

  現在の現地時間と日付:2009年6月6日土曜日18:00:00

printfの代わりにsprintfを使用して文字の配列に「印刷」し、strftimeを使用して、「ddd、dd mmm yyyy hh:nn:ss」(おそらく「%a、%d%b%」)に似たフォーマット文字列を指定できます。 Y%H:%M:%S ")そして、'LocalTimeZone.Bias'の代わりに'longinttimezone'グローバル変数を使用します。

主なハードルは、cコードの呼び出し方を理解することだと思います。たぶん、pascalから直接time.hを使用することもできますが、私はそれを調査します。

于 2009-06-11T18:41:18.597 に答える