天天看點

時間戳

時間戳,也叫做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,如需轉載請自行聯系原作者