Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何解析UTC日期?_Delphi_Delphi 7_Delphi 6 - Fatal编程技术网

Delphi 如何解析UTC日期?

Delphi 如何解析UTC日期?,delphi,delphi-7,delphi-6,Delphi,Delphi 7,Delphi 6,我需要使用Delphi 6分析UTC日期: 2013-12-24T11:05:01.000+09:00 在Delphi 7中,我通过以下代码实现了这一点: 使用TXsDateTime: var utcTime : TXsDateTime; localTime : TDateTime; temp : string; begin temp := '2013-12-24T00:00:00.000-02:00'; utcTime.XSToNative(temp); localTime :=

我需要使用Delphi 6分析UTC日期:

2013-12-24T11:05:01.000+09:00
在Delphi 7中,我通过以下代码实现了这一点:

  • 使用
    TXsDateTime

    var
     utcTime : TXsDateTime;
     localTime : TDateTime;
     temp : string;
    begin
     temp := '2013-12-24T00:00:00.000-02:00';
     utcTime.XSToNative(temp);
     localTime := utcTime.AsUTCDateTime; // get time in +00:00 timezone
     localTime := IncHour(localTime, 9); // het time local timezone
     //...
    end;
    
  • 使用带有
    t格式设置的
    strotdatetime
    重载:

    var
      localTime : TDateTime;
      temp, datetimePart : string;
      formatSettings : TFormatSettings;
    begin
     temp := '2013-12-24T00:00:00.000+01:00';
     //init format settings
     GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);
     formatSettings.DateSeparator := '-';
     formatSettings.ShortDateFormat := 'yyyy-MM-dd';
     //parse datetime
     datetimePart := StringReplace(copy(temp,1,Length(temp)-10),'T',' ',[]);
     localTime := StrToDateTime(datetimePart, formatSettings);
     //get datetime in +00:00 timezone
     localTime := IncHour(localTime, -1*strtoint(copy(temp,Length(temp)-5,3)));
     localTime := IncMinute(localTime, -1*strtoint(copy(temp,Length(temp)-1,2)));
     //get datetime in local timezone
     localTime := IncHour(localTime , 9);
     //...
    end;
    
  • 但在Delphi 6中:

  • 我甚至不能调用
    XSToNative
    ,因为它会抛出
    EConvertError
    错误放置日期的月和日部分;而且
    TXsDateTime
    不包含
    AsUTCDateTime
    的定义
  • SysUtils
    不包含
    t格式设置的定义
    ,因此我使用的
    strodatetime
    的重载不可用

  • 在Delphi 6中,我是否缺少任何东西,或者我还可以使用什么来解析此格式?

    最后我使用了
    EncodeDateTime
    函数:

    var
     time1, time2 : TDateTime;
     year,month,day,hour,minute,second,mlsecond, hourOffset, minOffset : integer;
     temp :string;
    begin
     temp := '2013-12-24T00:00:00.000-09:30';
     //parse separate parts of the datetime
     year := strtoint(copy(temp,1,4));
     month := strtoint(copy(temp,6,2));
     day := strtoint(copy(temp,9,2));
     hour := strtoint(copy(temp,12,2));
     minute := strtoint(copy(temp,15,2));
     second := strtoint(copy(temp,18,2));
     mlsecond := strtoint(copy(temp,21,3));
     hourOffset := strtoint(copy(temp,25,2));
     minOffset := strtoint(copy(temp,28,2));
     //adjust timezone offset sign
     if(temp[24]='+')then
     begin
      hourOffset := -1 * hourOffset;
      minOffset := -1 * minOffset;
     end;
     //get time in the +00:00 timezone
     time1 := EncodeDateTime(year,month,day,hour,minute,second,mlsecond);
     time1 := IncHour(time1, hourOffset);
     time1 := IncMinute(time1, minOffset);
     //get time in local timezone
     time2 := IncHour(time1, 9);
     //...
    end;
    

    我不确定
    复制(temp,9,2)
    (例如)方法是否可靠。如果字符串开头有空格,或者一个一位数的月份,或者…,该怎么办。。。?可能最好将其分解为多个部分,在破折号、冒号等处拆分。如果输入与函数的域不匹配,则所有赌注都将被取消,@David,但所有函数都是如此。此函数的域是ISO 8601格式的字符串;前导空格和一位数月份不在有效输入集内。