時間獲取方法與裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機技術領域,尤其涉及一種時間獲取方法與裝置。
【背景技術】
[0002]很多計算機程序在運行時都需要獲取當前的時間。為了保證獲取的時間精確無誤,計算機程序不是直接獲取計算機系統(tǒng)上的時間(因為計算機系統(tǒng)上的時間可能不準確),而是通過網(wǎng)絡向時間同步服務器獲取正確的時間。
[0003]具體如下時間獲取步驟如下:
[0004]1、客戶端(計算機)通過網(wǎng)絡向時間同步服務器請求同步;
[0005]2、時間同步服務器將當前的精確時間發(fā)給客戶端;
[0006]3、客戶端收到時間數(shù)據(jù)后更改計算機系統(tǒng)的時間;
[0007]4、之后如果客戶端需要獲取系統(tǒng)時間的時候直接獲取計算機系統(tǒng)的時間就是和網(wǎng)絡上的時間同步服務器一致的時間。
[0008]由于計算機程序每次請求同步都需要更改計算機系統(tǒng)的時間,再讀取計算機系統(tǒng)的時間作為當前的時間,則會存在以下的缺點:
[0009]1、同步時間之后因為直接修改了計算機系統(tǒng)時間會影響到其他直接使用計算機時間的程序,可能導致其他程序出錯;
[0010]2、修改計算機系統(tǒng)的時間通常需要管理員級別的高級權限。
【發(fā)明內容】
[0011]本發(fā)明實施例提出一種時間獲取方法與裝置,能夠為計算機程序提供精確無誤的時間,不會影響到其他程序的運行,并且需要的權限低。
[0012]本發(fā)明實施例提供一種時間獲取方法,包括:
[0013]當開始執(zhí)行一個計算機程序時,為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令;
[0014]獲取所述時間同步服務器返回的Unix時間戳,并將所述Unix時間戳存儲在所述時間戳存儲區(qū)中;
[0015]定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值;
[0016]當執(zhí)行所述計算機程序的過程中需要獲取當前時間時,將所述時間戳存儲區(qū)當前存儲的Unix時間戳轉換為時間數(shù)據(jù),并將所述時間數(shù)據(jù)作為所述當前時間。
[0017]在一個實施方式中,所述定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值,具體是:
[0018]每隔1秒的時間對存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值加1。
[0019]在另一個實施方式中,所述獲取所述時間同步服務器返回的Unix時間戳,并將所述Unix時間戳存儲在所述時間戳存儲區(qū)中具體是:
[0020]獲取所述時間同步服務器返回的Unix時間戳,將所述Unix時間戳轉換為毫秒的格式,并將轉換格式后的Unix時間戳存儲在所述時間戳存儲區(qū)中;
[0021]則所述定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值,具體是:
[0022]每隔1毫秒的時間對存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值加1。
[0023]進一步地,所述當開始執(zhí)行一個計算機程序時,為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令包括:
[0024]當開始執(zhí)行一個計算機程序時,判斷所述計算機程序是否具有時間獲取權限;
[0025]若所述計算機程序具有時間獲取權限,則為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令;
[0026]其中,所述時間獲取權限是預先為在運行過程中需要使用時間的計算機程序分配的權限。
[0027]進一步地,所述計算機程序的時間獲取方法還包括:
[0028]當停止執(zhí)行所述計算機程序時,從所述內存中釋放所述時間戳存儲區(qū)。
[0029]相應地,本發(fā)明實施例還提供一種時間獲取裝置,包括:
[0030]啟動執(zhí)行模塊,用于當開始執(zhí)行一個計算機程序時,為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令;
[0031]時間戳獲取模塊,用于獲取所述時間同步服務器返回的Unix時間戳,并將所述Unix時間戳存儲在所述時間戳存儲區(qū)中;
[0032]時間戳維護模塊,用于定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值;
[0033]時間獲取模塊,用于當執(zhí)行所述計算機程序的過程中需要獲取當前時間時,將所述時間戳存儲區(qū)當前存儲的Unix時間戳轉換為時間數(shù)據(jù),并將所述時間數(shù)據(jù)作為所述當前時間。
[0034]在一個實施方式中,所述時間戳維護模塊具體用于每隔1秒的時間對存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值加1。
[0035]在另一個實施方式中,所述時間戳獲取模塊具體用于獲取所述時間同步服務器返回的Unix時間戳,將所述Unix時間戳轉換為毫秒的格式,并將轉換格式后的Unix時間戳存儲在所述時間戳存儲區(qū)中;
[0036]所述時間戳維護模塊具體用于每隔1毫秒的時間對存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值加1。
[0037]進一步地,所述啟動執(zhí)行模塊包括:
[0038]權限驗證單元,用于當開始執(zhí)行一個計算機程序時,判斷所述計算機程序是否具有時間獲取權限;
[0039]啟動執(zhí)行單元,用于當所述計算機程序具有時間獲取權限時,為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令;
[0040]其中,所述時間獲取權限是預先為在運行過程中需要使用時間的計算機程序分配的權限。
[0041]進一步地,所述時間獲取裝置還包括停止執(zhí)行模塊;
[0042]所述停止執(zhí)行模塊用于當停止執(zhí)行所述計算機程序時,從所述內存中釋放所述時間戳存儲區(qū)。
[0043]實施本發(fā)明實施例,具有如下有益效果:本發(fā)明實施例提出一種時間獲取方法,通過為計算機程序在內存中分配一個時間戳存儲區(qū),將從時間同步服務器得到的Unix時間戳存儲在所述時間戳存儲區(qū)中并定時對其維護;在所述計算機程序需要獲取當前時間時,則將所述時間戳存儲區(qū)當前存儲的Unix時間戳轉換為時間數(shù)據(jù),并將所述時間數(shù)據(jù)作為所述當前時間。即計算機程序的時間與計算機系統(tǒng)的時間是獨立的,互不影響,整個過程不會更改計算機系統(tǒng)的時間。因此本方案不會受到其他程序或者人為更改計算機系統(tǒng)的時間的影響,也不會影響到其他需要使用計算機系統(tǒng)的時間的程序,并且無需高級別的權限。同時本發(fā)明實施例還提供了一種時間獲取裝置,用于執(zhí)行上述時間獲取方法的步驟,達到相應的技術效果。
【附圖說明】
[0044]圖1是本發(fā)明實施例提供的時間獲取方法的流程示意圖;
[0045]圖2是本發(fā)明實施例提供的時間獲取裝置的結構框圖。
【具體實施方式】
[0046]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0047]參見圖1,是本發(fā)明提供的時間獲取方法的第一實施例的流程示意圖,該方法包括以下步驟:
[0048]S101,當開始啟動一個計算機程序時,為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令;
[0049]S102,獲取所述時間同步服務器返回的Unix時間戳,并將所述Unix時間戳存儲在所述時間戳存儲區(qū)中;
[0050]S103,定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值;
[0051]S104,當執(zhí)行所述計算機程序的過程中需要獲取當前時間時,將所述時間戳存儲區(qū)當前存儲的Unix時間戳轉換為時間數(shù)據(jù),并將所述時間數(shù)據(jù)作為所述當前時間。
[0052]Unix時間戳是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。Unix時間戳的0按照ISO 8601規(guī)范為:1970-01-01T00:00:00Z。一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒。
[0053]在一個實施方式中,步驟S103中所述定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值,具體是:
[0054]每隔1秒的時間對存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值加1。
[0055]因此,存儲在所述時間戳存儲區(qū)中的Unix時間戳對應的時間精度為1秒。
[0056]在另一個實施例中,步驟S102中所述獲取所述時間同步服務器返回的Unix時間戳,并將所述Unix時間戳存儲在所述時間戳存儲區(qū)中具體是:
[0057]獲取所述時間同步服務器返回的Unix時間戳,將所述Unix時間戳轉換為毫秒的格式,并將轉換格式后的Unix時間戳存儲在所述時間戳存儲區(qū)中;
[0058]貝lj步驟S103中所述定時增加存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值,具體是:
[0059]每隔1毫秒的時間對存儲在所述時間戳存儲區(qū)中的Unix時間戳的數(shù)值加1。
[0060]因此,存儲在所述時間戳存儲區(qū)中的Unix時間戳對應的時間精度為1毫秒。
[0061]進一步地,步驟S101中所述當開始執(zhí)行一個計算機程序時,為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令包括:
[0062]當開始執(zhí)行一個計算機程序時,判斷所述計算機程序是否具有時間獲取權限;
[0063]若所述計算機程序具有時間獲取權限,則為所述計算機程序在內存中分配一個時間戳存儲區(qū),并向時間同步服務器發(fā)送時間戳獲取指令;
[0064]其中,所述時間獲取權限是預先為在運行過程中需要使用時間的計算機程序分配的權限。只有用于時間獲取權限的計算機程序才會分配一個時間戳存儲區(qū)以及向時間同步服務器發(fā)送時間戳獲取指令。
[0065]進一步地,所述計算機程序的時間獲取方法還包括:
[0066]當停止執(zhí)行所述