2013-07-25 25 views
1

iwant獲得時間火鳥類似GETTIME於JavaScript 我已創建了一個,但它不是那麼準確的時間差增量日常我想UNIX時間上的火鳥

CREATE PROCEDURE GETTIMEINMILLISECONDS 
RETURNS (
    MILL VARCHAR(50) 
) 
AS 
    DECLARE VARIABLE VAR_PARAM INTEGER; 
BEGIN 
select 
(((extract(year from current_timestamp) 
    -extract(year from cast('01/01/1970 00:00:00' as timestamp))) * 31536000000) + 
(extract(month from current_timestamp) * 2592000000) + 
(extract(day from current_timestamp) * 8640000) + 
(extract(Hour from current_timestamp) * 3600000) + 
(extract(minute from current_timestamp) * 60000) + 
    (extract(second from current_timestamp) * 1000))-192960000 
    from rdb$database into :Mill; 
    suspend; 
END 
; 

回答

3

在火鳥2.1和更高您可以使用

select DATEDIFF(second, timestamp '1/1/1970 00:00:00', current_timestamp) 
from rdb$database 

對於更早的版本,你可以從FreeAdhocUDF使用UDF F_AGEINSECONDS:

select F_AGEINSECONDS('1/1/1970 00:00:00', current_timestamp) from 
rdb$database 

通過添加時區,如果你是不是在GMT偏移時間戳見http://tech.groups.yahoo.com/group/firebird-support/message/102699

你需要考慮你的當前時區。例如,對於CEST(+2:00),您將需要使用:

select DATEDIFF(second, timestamp '1970-01-01 02:00:00', current_timestamp) 
from rdb$database 

(注意我切換到這裏ISO-8601的日期格式)

+0

改變我的當前時區有很大的幫助,這個代碼是從rdb $數據庫中選擇DATEDIFF(第二個,時間戳'1/1/1970 08:00:00',current_timestamp)* 1000 到Mill: –

+1

Unix時間是自1970-01-01以來的秒數,所以不需要乘以千(如果你需要以毫秒爲單位['DATEDIFF'](http://www.firebirdsql.org/file/documentation/) reference_manuals/reference_material/html/langrefupd25-intfunc-datediff.html)也支持'MILLISECOND'。 –