關於日期和時間

2021-06-26 17:41:14 字數 880 閱讀 5044

之所以會涉及到這一塊主要是在乙個專案中,資料是以時間為唯一索引的。

該資料每天只產生一條,所以設計中將gmt時間天的0時0分0秒0毫秒作為資料索引。

初時並沒有發現什麼不妥,到專案後期,乙個開發人員提出了關於時區的問題,比如我們中國屬於東八區,

也就是時間會比gmt時間早8個小時, 當gmt時間為0點,中國時間為8點,

而比如中國時間為7點時,gmt時間為昨天的23點!

坑貨!這就是沒有考慮到的時區問題!

按照正常的邏輯,所以日期都應該是以本地時間為準的,

折騰了挺久,最終找到完美的解決方案:

先說下基本思路:

1、日期應該以本地為準,日期的變更是本地直接可感的

2、需要把日期轉為為唯一的時間戳,以作為資料庫的唯一索引

3、時間戳最好以gmt時間為準

**思路:

1、建立一張本地日曆,獲得本地的日期

2、建議一張gmt日曆,設定1中得到的日期,並把時分秒毫秒歸零

3、從gmt日曆中獲得時間戳

整體**實現如下:

private void testtime1()
其中特別需要注意的是,日曆在設定完引數後並不利己生成相應的時間戳,

檢視原始碼可以發現

protected abstract void computetime();

用來實現時間戳的生成,可惜該方法是protected ,我們無法直接使用,

順藤摸瓜,搜尋下發現

public long gettimeinmillis();

會呼叫computetime()方法。

綜上,我們在給日曆設定完引數後,需要呼叫gettimeinmillis()才會生成相應的時間戳。

以上,完畢。

關於日期時間簡述

date nowtime new date system.out.println nowtime 假設當前時間為2000年01月01日11 11 11,則輸出結果為 sat jan 01 11 11 11 cst 2000 若使用帶引數的構造方法則是獲取西元前的時間例如 date date new ...

時間和日期

獲取當前時間戳 import time sticks time.time print sticks import time localtime time.localtime time.time print localtime 用asctime import time localtime time.a...

時間和日期

日期時間 1.系統時間的獲取 from datetime import datetime dt datetime.now print type dt print dt print dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second,dt.month...