Delphi日期时间 UNIX

Delphi日期时间,就是常见的 2014-05-02 10:37:35

--------------------------------------------------------------------

UNIX日期时间,一个整数,从1970/01/01 开始的秒数,int64位

-------------------------------------------------------------------

标准UTC时间,

世界统一时间,世界标准时间,国际协调时间,简称UTC

不属于任意时区

中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。

-------------------------------------------==============

时区,北京是东8区,就是要加 8个小时,8*60*60=28800

注册表有个日期值,1398998255

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  with TRegistry.Create(KEY_WOW64_64KEY or KEY_ALL_ACCESS) do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKey(‘SOFTWARE\Microsoft\Windows NT\CurrentVersion‘, False) then
    begin
      Memo1.Lines.Add(IntToStr(ReadInteger(‘InstallDate‘)));//1398998255
      Memo1.Lines.Add(DateTimeToStr(UnixToDateTime(ReadInteger(‘InstallDate‘))));//2014-05-02 2:37:35
      Memo1.Lines.Add(DateTimeToStr(UnixToDateTime(ReadInteger(‘InstallDate‘) + 28800))); //2014-05-02 10:37:35
      Memo1.Lines.Add(DateTimeToStr(JavaToDelphiDateTime(ReadInteger(‘InstallDate‘))));// 1970-01-17 12:36:38
    end;
  finally
    Free
  end;
end;

http://www.sharejs.com/codes/delphi/2189

Unix时间戳转换成Delphi的TDateTime
function UnixDateToDateTime(const USec: Longint): TDateTime;
const
  cUnixStartDate: TDateTime = 25569.0; // 1970/01/01
begin
  Result := (Usec / 86400) + cUnixStartDate;
end;
{ Unix date conversion support } RTL

HoursPerDay = 24;
MinsPerHour = 60;
SecsPerMin = 60;
MSecsPerSec = 1000;
MinsPerDay = HoursPerDay * MinsPerHour;
SecsPerDay = MinsPerDay * SecsPerMin;
MSecsPerDay = SecsPerDay * MSecsPerSec;


{ Days between 1/1/0001 and 12/31/1899 }


DateDelta = 693594;


{ Days between TDateTime basis (12/31/1899) and Unix time_t basis (1/1/1970) }


UnixDateDelta = 25569;


function DateTimeToUnix(const AValue: TDateTime): Int64;
begin
  Result := Round((AValue - UnixDateDelta) * SecsPerDay);
end;

function UnixToDateTime(const AValue: Int64): TDateTime;
begin
  Result := AValue / SecsPerDay + UnixDateDelta;
end;

Unix时间戳(Unix timestamp)转换工具

http://tool.chinaz.com/Tools/unixtime.aspx

http://blog.csdn.net/missmecn/article/details/5870639

uses DateUtils;
DateTimeToUnix(Now)

可以转换到unix时间,但是注意的是,它得到的时间比c语言中time()得到的时间大了8*60*60
这是因为Now是当前时区的时间,c语言中time()是按格林威治时间计算的,
北京时间比格林威治时间多了8小时
DateTimeToUnix(Now)-8*60*60 就和c语言中time()得到的一样了

但我进一步研究DateTimeToUnix函数时发现,Delphi中的时间没有经过任何的转换,是直接读取系统时间

我试着改变当前计算机时区,发现Delphi返回值没有任何改变。

而在C++中,改变计算机时区,则time()返回值也随着改变,这就说明C++中标准时间是通过本地时间和当前时区进行计算得来的。

因此,在Delphi开发时,需要注意Delphi获取的时间戳是当前计算机所在时区时间,并非标准UTC时间。

UnixToDateTime()函数并没有对时区进行转换,仅仅是对时间进行了转换。

时间: 2024-08-06 22:12:48

Delphi日期时间 UNIX的相关文章

DELPHI日期时间函数(DateUtils单元)

原文出自:http://shao171.blog.163.com/blog/static/238397019201502011844293/ CompareDate 函数 比较两个日期时间值日期部分的大小 CompareDateTime 函数 比较两个日期时间值的大小 CompareTime 函数 比较两个日期时间值时间部分的大小 DateOf 函数 去除日期时间值的时间部分 DateTimeToJulianDate 函数 转换日期时间值为儒略日 DateTimeToModifiedJulian

Delphi DateUtils时间单元

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

Unix时间戳转日期时间格式,C#、Java、Python各语言实现!

之前有个Q上好友没事问我,怎么自己写Unix时间戳转日期时间?于是我就顺手写了个C#版本给他!最近想起来,就萌发多写几个语言的版本分享,权当练习思路外加熟悉另外两种语言. 先说转换步骤 先处理年份,从1970年开始处理,根据平年闰年的总秒数,先得到年,剩余的秒数再求月份: 根据剩余秒数求得月份,因为2月的缘故,同样需要处理平年闰年': 得天数,直接除以每天的总秒数,然后取得天: 取小时.分钟.秒: Python版本: # -*- coding: UTF-8 -*- from datetime i

PHP 中日期时间函数 date() 用法总结

[导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它使用字母来表示日期和时间 格式化日期date() 函数的第一个参数规定了如何格式化日期/时间.它使用字母来表示日期和时间的格式.这里列出了一些可用的字母: •d - 月中的天 (01-31)•m - 当前月,以数字计 (01-12)•Y - 当前的年(四位数)您可以在我们的 PHP Date 参考手

取得一个日期的 Unix 时间戳 mktime()

mktime()函数 语法: int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") ]]]]]] ) 根据给出的参

php学习笔记数组与数据结构1(日期时间函数及遇到的问题解决)

1在PHP中从最简单的数组构建: 1)常用函数: 生成随机数: 1 echo rand(1,10);//两个参数来确定随机数的范围 2 echo rand(10);10//被当成了他的种子,即不能只给一个参数 2的结果是(缺少一个参数) 2)日期时间函数 <?php var_dump(time());//取当前时间的UNIX时间戳 ?> 这样显示的结果: 例:类似于这样(前提是用var_dump()输出返回的值) 正确的方式是 *年份year(四位)用大写的Y,月份month用小写m,天day

mysql 将时间戳直接转换成日期时间

date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 '%Y%m%d' 主要是将返回值格式化 例如: mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' ) ->20071120 mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' ) ->2007年11月20 UNIX_TIMESTAMP()是与之相对正好相反的时间函数 UNIX

js非常强大的日历控件fullcalendar.js, 日期时间库: moment.js

日历控件: https://fullcalendar.io/docs/ https://fullcalendar.io/docs/event_data/events_function/ https://fullcalendar.io/docs/event_data/Event_Object/ https://fullcalendar.io/docs/mouse/eventClick/ <!DOCTYPE html> <html> <head> <meta char

jquery 时间戳和日期时间转化

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 (function($) {     $.extend({         myTime: {             /**              * 当前时间戳