Delphi 如何解析UTC日期?
我需要使用Delphi 6分析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 :=
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;
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格式的字符串;前导空格和一位数月份不在有效输入集内。