關於MongoDB時區問題

2021-09-26 08:31:24 字數 1036 閱讀 5801

由於mongodb儲存時間按照utc時間儲存的,其官方驅動mongodb.driver儲存時間的時候將本地時間轉換為了utc時間,但它有個蛋疼的bug,讀取的時候非常蛋疼的是返回的是utc使時間。乙個非常直觀的體現是時間型別字段儲存後和再讀入的是不一致的,乙個簡單的示例如下: 

table.insertone(new

myclass()

);foreach (var data in table.find(_=> true

).tolist())

執行這段**就會發現時間讀取出來和寫入的相差8個小時(北京時間)。

本身mongodb官方是知道這個的,也有很多人反應的這一問題:datetime timezone problem。,但官方是沒有修改的意向的,官方給出的修改方法是: 在時間型別屬性欄位上顯式標註是否為本地時間

[bsondatetimeoptions(kind =datetimekind.local)]

public datetime somedateproperty

這個方法雖然看起來沒有什麼問題,但用起來麻煩不已,一來要在一些不相關的dto庫中引入bson的庫,另一方面加標記很容易遺漏。實際上操作起來是很不方便的。

於是,有人有找到了另一種方法,那就是全域性設定時間序列化的方式:

datetimeserializationoptions.defaults = datetimeserializationoptions.localinstance;

這個方法只在mongodb.driver 1.x版本中有效,到了2.x後,datetimeserializationoptions已經被廢棄了,可以使用如下方法:

var serializer = new

datetimeserializer(datetimekind.local, bsontype.datetime);

bsonserializer.registerserializer(

typeof(datetime), serializer);

關於MongoDB時區問題

table.insertone new myclass foreach var data in table.find true tolist 執行這段 就會發現時間讀取出來和寫入的相差8個小時 北京時間 本身mongodb官方是知道這個的,也有很多人反應的這一問題 datetime timezone...

關於時區date default timezone

echo function exists date default timezone set 在這它總是返回1,這函式是判斷這裡面的字元是不是乙個定義了的函式名 echo date y m d h i s 預設時區的時間 echo date default timezone set etc gmt ...

關於docker部署專案上時區問題

不知道大家使用docker部署專案時有沒有遇到這樣的情況!資料庫的時間有問題 這裡的建立時間並非真實的三點,而是相差了八個小時 沒錯今天的問題就是關於docker容器的時間問題。1,先看伺服器的時間 我這裡的時間和當前時間一致。但是進入某個容器時顯示日期卻差了八個小時時差。docker exec i...