Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Знак для времени UTC в TTimeZoneInformation.bias Delphi 7  [new]
evgen29
Member

Откуда:
Сообщений: 161
Здравствуйте! Понадобилось мне выводить время в UTC. Написал небольшой код, но суть в том, что смещение в минутах относительно UTC мне возвращает со знаком минус(-180), хотя я живу в Подмосковье и UTC у меня на компе настроено как время Московское должно возвращать со знаком +.
Следующий код выдаёт например так: 2020-06-22T18:05:15-03:00, а правильно 2020-06-22T18:05:15+03:00
Гугление подобного для Delphi 7 результатов не дало.

чё делать? помогите спасите )

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,DateUtils, StdCtrls, Math;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
  ZoneInfo: TTimeZoneInformation;
  st: _SYSTEMTIME;
  Bias: Integer;
  tmp : TDateTime;
  znk: Char;
begin
  case GetTimeZoneInformation(ZoneInfo) of
        TIME_ZONE_ID_STANDARD:
            Bias := ZoneInfo.Bias + ZoneInfo.StandardBias;
        TIME_ZONE_ID_DAYLIGHT:
            Bias := ZoneInfo.Bias + ZoneInfo.DaylightBias;
        TIME_ZONE_ID_UNKNOWN:
            Bias := ZoneInfo.Bias;
        else
            Bias := 180;
    end;
  znk:='+';  
  if Bias<0 then znk:='-';
  ShowMessage(FormatDateTime('yyyy-mm-dd',now)+'T'+FormatDateTime('hh:nn:ss',now)+znk+FormatFloat('00',Abs(Bias) div 60)+':'+FormatFloat('00',Abs(Bias) mod 60));


end;

end.
22 июн 20, 18:08    [22155341]     Ответить | Цитировать Сообщить модератору
 Re: Знак для времени UTC в TTimeZoneInformation.bias Delphi 7  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11913
А если почитать документацию?
Bias

The current bias for local time translation on this computer, in minutes. The bias is the difference, in minutes, between Coordinated Universal Time (UTC) and local time. All translations between UTC and local time are based on the following formula:

UTC = local time + bias
22 июн 20, 18:35    [22155363]     Ответить | Цитировать Сообщить модератору
 Re: Знак для времени UTC в TTimeZoneInformation.bias Delphi 7  [new]
evgen29
Member

Откуда:
Сообщений: 161
_Vasilisk_,

видимо заработался, спасибо!
тогда в скрипте поменяю и будет все ок:
  if Bias>=0 then znk:='-';
23 июн 20, 08:27    [22155680]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить