function ConvertGMTTimeToLocalTime(GMTTimeStr: string): string;
var
TimeStrList: TStringList;
Month: string;
LocalTime: TDateTime;
begin
//GMTTIME Tue, 02 Dec 2014 05:34:15 GMT
Result := '';
if Trim(GMTTimeStr) = '' then Exit;
try
GMTTimeStr := Copy(GMTTimeStr, Pos(',', GMTTimeStr) + 1, MaxInt);
GMTTimeStr := StringReplace(GMTTimeStr, 'GMT', '', []);
GMTTimeStr := Trim(GMTTimeStr);
TimeStrList := TStringList.Create;
while (Pos(' ', GMTTimeStr) > 0) do
begin
TimeStrList.Add(Copy(GMTTimeStr, 1, Pos(' ', GMTTimeStr) - 1));
GMTTimeStr := Copy(GMTTimeStr, Pos(' ', GMTTimeStr) + 1, MaxInt);
end;
TimeStrList.Add(GMTTimeStr);
case TMonth(GetEnumValue(TypeInfo(TMonth), TimeStrList[1])) of
Jan: Month := '01';
Feb: Month := '02';
Mar: Month := '03';
Apr: Month := '04';
May: Month := '05';
Jun: Month := '06';
Jul: Month := '07';
Aug: Month := '08';
Sep: Month := '09';
Oct: Month := '10';
Nov: Month := '11';
Dec: Month := '12';
end;
LocalTime := StrToDateTime(TimeStrList[2] + '-' + Month + '-' + TimeStrList[0] + ' ' + TimeStrList[3]);
LocalTime := IncHour(LocalTime, 8);
Result := FormatDateTime('YYYY-MM-DD HH:MM:SS', LocalTime);
finally
FreeAndNil(TimeStrList);
end;
end;
function DateTimeToGMT(const ADate:TDateTime):string;
const
WEEK:array[1..7] of PChar = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
MonthDig:array[1..12] of PChar =
('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var
wWeek,wYear,wMonth,wDay,wHour,wMin,wSec,wMilliSec:Word;
sWeek,sMonth:string;
begin
DecodeDateTime(ADate,wYear,wMonth,wDay,wHour,wMin,wSec,wMilliSec);
wWeek := DayOfWeek(ADate);
sWeek := WEEK[wWeek];
sMonth := MonthDig[wMonth];
Result := Format('%s, %.2d %s %d %.2d:%.2d:%.2d GMT',[sWeek,wDay,sMonth,wYear,wHour,wMin,wSec]);
end;
//function UnixTime: Int64;
//begin
// result := DateTimeToUnix(Now) - 8 * 60 * 60;
//end;
function GetUTCtime:string;
var
TimeNow: TDateTime;
pTime: _TIME_ZONE_INFORMATION;
Bias : Longint;
begin
GetTimeZoneInformation(pTime);//获取时区
Bias := pTime.Bias;
TimeNow := IncMinute(Now, Bias);
Result := FormatDateTime('yyyyMMdd',TimeNow)+'T'+FormatDateTime('HHmmss',TimeNow)+'Z';
end;
function DateTimeToUnix(ConvDate: TDateTime;Len:integer=10): string;
var
zi : TTimeZoneInformation;
unixtime,difflen:Int64;
ATimeStamp: TTimeStamp;
timezzz:string;
begin
GetTimeZoneInformation(zi);
unixtime := Round((ConvDate - UnixDateDelta) * 86400) + 60*(zi.Bias + zi.DaylightBias);
Result := IntToStr(unixtime);
if Len=13 then
begin
ATimeStamp := DateTimeToTimeStamp(ConvDate);
timezzz := IntToStr(ATimeStamp.Time);
timezzz := Copy(timezzz,Length(timezzz)-2,Length(timezzz));
Result := Result+timezzz;
difflen := 13-length(Result);
//时分秒都是0的话。长度会不够所以要补
if difflen > 0 then
Result := Result+StringOfChar('0', difflen)
end;
end;
function UnixToDateTime(USec: string;len:integer=10): string;
//获取本地时区差
function LocalTimeZoneBias: Int64;
var
TimeZoneInformation: TTimeZoneInformation;
Bias: Longint;
begin
case GetTimeZoneInformation(TimeZoneInformation) of
TIME_ZONE_ID_STANDARD: Bias := TimeZoneInformation.Bias + TimeZoneInformation.StandardBias;
TIME_ZONE_ID_DAYLIGHT: Bias := TimeZoneInformation.Bias + ((TimeZoneInformation.DaylightBias div 60) * -100);
else
Bias := TimeZoneInformation.Bias;
end;
Result := Bias;
end;
var
atime:Int64;
adatetime:TDateTime;
begin
atime := StrToInt64(Copy(USec,1,10));
adatetime := ((atime - 60*LocalTimeZoneBias) / 86400) + UnixDateDelta;
Result := FormatDateTime('yyyy-mm-dd hh:mm:ss', adatetime);
if Length(USec) = 13 then
Result := FormatDateTime('yyyy-mm-dd hh:mm:ss', adatetime)+'.'+Copy(USec,11,13);
end;