Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)

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()函数并没有对时区进行转换,仅仅是对时间进行了转换。

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

时间: 2024-10-05 20:27:48

Delphi中获取Unix时间戳及注意事项(c语言中time()是按格林威治时间计算的,比北京时间多了8小时)的相关文章

在不同编程语言中对Unix时间戳进行转换(Unix timestamp)

最近用到unix时间转换在mysql和.net中的应用.将此资料保存在博客中. 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)? Java time JavaScript Math.round(new Date().getTime()/1000) getTime()返回数值的单位是毫秒 Microsoft .NET / C# epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 1

Java 获取 Unix时间戳

unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. 在大多数的UNIX系统中UNIX时间戳存储为32位,这样会引发2038年问题. 但是,因为需求是需要int类型的UNIX时间戳. 开始的时候我是这样设计的. /** * 获取当前事件Unxi 时间戳 * @return */ public static int getUnixTimeStamp(){ long rest=System.currentTimeMillis()/1000L; return (i

时区之痒 - 从手机GPS模块获取的时间,真的是北京时间么?

去年互联网地图行业开始引入众包模式,国内比较大的地图商,比如四维图新.高德地图.百度地图纷纷开始推出UGC应用,众包给用户采集门址.公交站等信息,并按照工作量给与采集者一定的回报.我曾经玩过某德推出的“道路寻宝”APP,应用内部集成了道路拍拍.门址采集.公交拍拍.POI任务等.该应用有如下限制:(1)为了防止作弊,采集者必须打开GPS,才能拍摄门牌号.(2)为了保证图片清晰,采集工作只能在日出后半小时至日落前半小时内进行.问题在于,应用仅仅读取手机的时间进行日出日落时间判断.在一个用户线上会议,

获取UNIX时间戳

方法非常简单,通过一个time()即可获取当前的时间戳 虽然获取到了时间戳,但是这种表示方式并不符合我们人类习惯的时间方式,所以需要将时间戳转换为符合我们习惯的方式.通过一个date()函数即可转换时间戳 计算机在计算时间的时候是用时间戳来进行计算的,例如:计算下一周的日期和时间,计算机计算的方式为:当前的时间戳+7*24*3600 这里介绍几个将时间转换为时间戳的函数 mktime():将指定的日期和时间转换为时间戳 mktime(时,分,秒,月,日,年) 如果不给参数,得到的是当前的时间戳

delphi中获取memo鼠标所在位置的行和列(通过EM_GETRECT消息取得Rect后,自己算一下)

也是看别人写的,但是不容易找到,就转发一篇delphi版本的 function GetLine(X, Y: integer): TPoint;var  OldFont : HFont;  Hand : THandle;  TM : TTextMetric;  Rect : TRect;begin  Hand := GetDC(mmotest.Handle);  try    OldFont := SelectObject(Hand, mmotest.Font.Handle);    try   

postgresql获取Unix时间戳

-- timestamp to unix timestamp select now(), EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE 'now()')::int as ext, extract(epoch FROM now())::int, CURRENT_TIMESTAMP,date_part('epoch',CURRENT_TIMESTAMP)::int -- unix timestamp to timestamp SELECT TIMESTAMP

简述unix时间戳

unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp) 是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z. 一个小时表示为UNIX时间戳格式为:3600秒:一天表示为UNIX时间戳为86400秒,闰秒不计算. 在大多数的

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?

Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数.Unix时间戳不仅被使用在Unix 系统.类Unix系统中,也在许多其他操作系统中被广告采用. 目前相当一部分操作系统使用32位二进制数字表示时间.此类系统的Unix时间戳最多可以使用到格林威治时间2038年01月19日03时14分07秒(二进制:01111111 1111

Unix时间戳和Java中的时间戳的区别

最近在使用阿里的日志服务时,遇到了一些Java中Timestamp的坑,所以特意做了了解并整理了一下.在这之前首先得介绍一下Unix时间戳: Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒. 但是Java中很多获取时间戳的API并不是获取到Unix时间戳,而是获取到*从1970年1月1日(UTC/GMT的午夜)开始所经过的毫秒数***.以毫秒计算的时间戳下面统一称为时间戳.Java中获取时间戳的API以获取当前时间的时间戳为例,下面将展示多种获取时间戳的