gpt4 book ai didi

delphi - 将 TDateTime 转换为另一个时区,无论本地时区如何

转载 作者:行者123 更新时间:2023-12-03 15:16:53 29 4
gpt4 key购买 nike

无论用户的本地时区设置为何,使用 Delphi 2007,我都需要确定东部时区的时间 (TDateTime)。

我怎样才能做到这一点?当然,需要了解夏令时。

最佳答案

如果我理解正确,您需要相当于当前系统时间的东部时间。

为此,请使用 WiNAPI 函数 GetSystemTime()获取计算机当前的 UTC 时间。 UTC 与时区无关,并且始终会为您提供本初子午线的时间。

然后您可以使用WinAPI函数SystemTimeToTzSpecificLocalTime()从 UTC 时间计算任何其他给定时区的本地时间。为了SystemTimeToTzSpecificLocalTime()可以工作,你需要给它一个 TTimeZoneInformation填充了您要转换到的时区的正确信息的记录。

以下示例将始终为您提供根据 2005 年能源政策法案的东部时间本地时间。

function GetEasternTime: TDateTime;
var
T: TSystemTime;
TZ: TTimeZoneInformation;
begin
// Get Current time in UTC
GetSystemTime(T);

// Setup Timezone Information for Eastern Time
TZ.Bias:= 0;

// DST ends at First Sunday in November at 2am
TZ.StandardBias:= 300;
TZ.StandardDate.wYear:= 0;
TZ.StandardDate.wMonth:= 11; // November
TZ.StandardDate.wDay:= 1; // First
TZ.StandardDate.wDayOfWeek:= 0; // Sunday
TZ.StandardDate.wHour:= 2;
TZ.StandardDate.wMinute:= 0;
TZ.StandardDate.wSecond:= 0;
TZ.StandardDate.wMilliseconds:= 0;

// DST starts at Second Sunday in March at 2am
TZ.DaylightBias:= 240;
TZ.DaylightDate.wYear:= 0;
TZ.DaylightDate.wMonth:= 3; // March
TZ.DaylightDate.wDay:= 2; // Second
TZ.DaylightDate.wDayOfWeek:= 0; // Sunday
TZ.DaylightDate.wHour:= 2;
TZ.DaylightDate.wMinute:= 0;
TZ.DaylightDate.wSecond:= 0;
TZ.DaylightDate.wMilliseconds:= 0;

// Convert UTC to Eastern Time
Win32Check(SystemTimeToTzSpecificLocalTime(@TZ, T, T));

// Convert to and return as TDateTime
Result := EncodeDate(T.wYear, T.wMonth, T.wDay) +
EncodeTime(T.wHour, T.wMinute, T.wSecond, T.wMilliSeconds);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= 'In New York Citiy, it is now ' + DateTimeToStr(GetEasternTime);
end;

关于delphi - 将 TDateTime 转换为另一个时区,无论本地时区如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/690739/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com