天天看点

时间戳

时间戳,也叫做Unix时间戳,就是从1970年1月1日0时0分0秒到当前时间的总秒数。

ruby中时间戳的使用

在ruby中通过to_i方法来获取这个值。

irb(main):030:0> Time.now.to_i 

=> 1355205144 

如果需要把时间戳转换为具体的时间,通过Time.at方法来转换。

irb(main):031:0> Time.at(Time.now.to_i) 

=> 2012-12-11 13:52:40 +0800 

C#中时间戳的使用

在C#中没有时间戳的概念,没有直接获取时间戳的类库,不过根据定义我们可以自己写一个方法。

获取时间戳

private double getTimestamps() 

   return (DateTime.Now - new DateTime(1970, 1, 1)).TotalSeconds; 

由时间戳转换为时间

private DateTime getDateTime(double timestamps) 

    return new DateTime(1970, 1, 1).AddSeconds(timestamps); 

在SQL Server中使用时间戳

在SQL Server也没有直接获取时间戳的方法,我们还是可以根据定义来写。

SELECT DATEDIFF(s,'1970-01-01 08:00:00',GETDATE()) AS TimeStamps 

从时间戳转换为时间

DECLARE @Time NVARCHAR(15) 

SET @Time='1355206394' 

SELECT DATEADD(s,convert(int,@Time),'1970-01-01 08:00:00') as DTime

在SQL Server中还有一个容易和“时间戳”搞混的概念。

在SQL Server中,有一种列的类型叫做TIMESTAMP,这个TIMESTAMP翻译成中文也叫做“时间戳”。但是这个TIMESTAMP不是前面介绍的时间戳,不是从1970年1月1日0时0分0秒到当前时间的总秒数。

这个TIMESTAMP和时间没有任何的关系,它是一个二进制的数值,一张表只能有一个TIMESTAMP列,TIMESTAMP列不需要手动插入和更新。

在增加一行数据的时候,TIMESTAMP列就会自动添加,更新这行数据的时候,TIMESTAMP列会自动被更新成新值。

如果你使用select语句查询的话,TIMESTAMP列会显示为0x0000000000031511。

这个TIMESTAMP在SQL Server的表中是一个行版本的概念,可以用来做乐观并发控制。如果数据在获取到修改的中间有其他用户进行了修改,TIMESTAMP列就会自动发生变化,再次修改的时候就可以把TIMESTAMP作为匹配条件,来阻止修改,或者做其他的提示。

如果我们的某些信息需要版本的概念,同时只需要知道版本发生变化,而且不显示版本号,可以使用TIMESTAMP列,就不用自己设计编号来维护了。

参考文献

本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/1085640,如需转载请自行联系原作者