unix timestamp в милесекундах

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by realcoder, 4 Nov 2011.

  1. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    собственно вопрос: как получить unix time stamp в миллесекундах? чтоб было как в javascript:
    Code:
    new Date().getTime();
    пробовал так:
    Code:
    const
       // Sets UnixStartDate to TDateTime of 01/01/1970
      UnixStartDate: TDateTime = 25569;
    
     function DateTimeToUnix(ConvDate: TDateTime): int64;
     begin
       //example: DateTimeToUnix(now);
      Result := Round((ConvDate - UnixStartDate) * 86400);
     end;
    
    ....
    showmessage(inttostr(DateTimeToUnix(date)*1000));
    
    
    и в браузере:
    Code:
    javascript:alert(new Date().getTime());
    но значения значительно различаются.
    как описать функцию полностью аналогичную date.gettime();
    в js ?
    может начальное значение не то?
     
  2. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    Code:
    const
      UnixDateDelta = 25569; { 1970-01-01T00:00:00,0 }
      SecPerMin = 60;
      SecPerHour = SecPerMin * 60;
      SecPerDay = SecPerHour * 24;
      MinDayFraction = 1 / (24 * 60);
    function UnixTimeToDateTime(AUnixTime: DWord; ABias: Integer): TDateTime;
    begin
    Result := UnixDateDelta + (AUnixTime div SecPerDay) { Days }
    + ((AUnixTime mod SecPerDay) / SecPerDay) { Seconds }
    - ABias * MinDayFraction { Bias to UTC in minutes };
    end;
     
    {Convert Unix time to String with locale settings}
    
    function UnixTimeToStr(AUnixTime: DWord; ABias: Integer): string;
    begin
    Result := FormatDateTime('ddddd  hh:nn:ss', UnixTimeToDateTime(AUnixTime, ABias));
    end;
     
    {Convert TDateTime to Unix time}
     
    function DateTimeToUnixTime(ADateTime: TDateTime; ABias: Integer): DWord;
    begin
    Result := Trunc((ADateTime - UnixDateDelta) * SecPerDay) + ABias * SecPerMin;
    end;
    Где ABias - разница с Гринвичем в минутах