⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 labradtimestamps.pas

📁 As science advances, novel experiments are becoming more and more complex, requiring a zoo of contro
💻 PAS
字号:
{ Copyright (C) 2007 Markus Ansmann
 
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 2 of the License, or
  (at your option) any later version.
 
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
 
  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.  }

{
 TODO:

  - Check ToDateTime for negative values
  - Document
}

unit LabRADTimeStamps;

interface

 type
  TLabRADTimeStamp = packed record
    high: int64;
    lo: cardinal;
    hi: cardinal;
  end;

  function LabRADDateTimeToTimeStamp(Value: TDateTime): TLabRADTimeStamp;
  function LabRADTimeStampToDateTime(Value: TLabRADTimeStamp): TDateTime;
  function LabRADTimeStampToString(Value: TLabRADTimeStamp): string;

implementation

uses SysUtils, Windows;

var UTCOffset: Integer;

function LabRADDateTimeToTimeStamp(Value: TDateTime): TLabRADTimeStamp;
begin
  try
    if Value<0 then Value:=trunc(Value)+abs(frac(Value));
    Value:=(Value-1462)*3600*24+UTCOffset;
    Result.High:=trunc(Value);
    Value:=(Value-Result.High)*4294967296.0;
    Result.hi:=trunc(Value);
    Value:=(Value-Result.hi)*4294967296.0;
    Result.lo:=trunc(Value);
   except
    Result.High:=0;
    Result.lo:=0;
    Result.hi:=0;
  end;
end;

function LabRADTimeStampToDateTime(Value: TLabRADTimeStamp): TDateTime;
begin
  Result:=1462+(Value.High+Value.hi/4294967296.0+Value.lo/18446744073709551616.0-UTCOffset)/3600/24;
end;

function LabRADTimeStampToString(Value: TLabRADTimeStamp): string;
var T: TDateTime;
begin
  T:=1462+(Value.High+Value.hi/4294967296.0+Value.lo/18446744073709551616.0-UTCOffset)/3600/24;
  Result:=formatdatetime('mm/dd/yyyy hh:mm:ss.zzz', T);
end;

var T: TTimeZoneInformation;
begin
  GetTimeZoneInformation(T);
  UTCOffset:=(T.Bias+T.DaylightBias)*60;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -