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;

 

posted @ 2021-12-22 17:03  Tag  阅读(426)  评论(0)    收藏  举报