delphi unix时间戳 10位 13位 转换
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;
//获取UnixTime 时间 主要跟上面区别的是在获取本地时区上 function GetUnixTime:string; //获取本地时区差 function LocalTimeZoneBias: Integer; 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; begin Result := inttostr(Round((Now - UnixDateDelta) * 86400)+60*LocalTimeZoneBias ); end;