2011-07-13 53 views
1

我有各種各樣的時間戳存儲在Mongo集合中,有些作爲浮點數,有些作爲整數。轉換時間戳存儲在一個Mongo集合

它們全部存儲在BST中,服務器很快就會切換到UTC。如何在Mongo內將它們轉換爲UTC時間戳?

在MySQL中我可以這樣做:

UPDATE `table` SET `field` = CONVERT_TZ(`field`, 'Europe/London', 'UTC'); 

是否有蒙戈相同呢?

回答

1

您必須使用您選擇的語言並逐個更新它們。它應該像加載數據並重寫它的for循環一樣簡單。

只要仔細檢查您選擇的語言如何處理跨時區的時間戳。進行這種數據更改會對生產代碼產生各種意想不到的影響。

-1

幾點考慮有關日期在蒙戈:

  • 所有時間都存儲在UTC在MongoDB中
  • MongoDB的內部存儲日期爲自1970-01-01T00代表 毫秒的64位整數:00 :00Z
  • 如果您提供的日期值是不是已經在UTC它 驅動程序將被存儲在MongoDB中之前被轉換爲UTC

建議不要使用DateTime.Parse。 關於DateTime如何格式化,您將會遇到各種各樣的時區問題。

取而代之的只是使用UTC風格的DateTime構造函數之一。

例子:

var dateTime = new DateTime(2011, 5, 5, 0, 0, 0, DateTimeKind.Utc); 

希望你覺得它有用。

+0

他不會將日期存儲爲Date對象,而是存儲和浮點數。 – Theo

+0

另外,你爲什麼假設他使用C#?看看其他問題,他問他們主要是關於PHP。 – Theo

-1

時間戳通常採用UTC,而不是特定的時區。所有使用的日期/時間庫返回的時間戳都是自1970年1月1日UTC以來的秒數(或毫秒)。檢查用於創建時間戳的庫的文檔以確保。

這意味着你應該沒問題,除非你使用了一個不遵循這個約定的日期/時間庫,或者以某種方式自己計算了時間戳並考慮了時區。

例如在JavaScript中,如果你存儲從new Date().getTime()返回的值後來覺得值傳遞給new Date(...)不同的系統,你最終會以相同的絕對日期/時間,無論這兩個系統的時區。 Ruby也是如此,在一臺機器上執行Time.new.to_i,然後在另一臺機器上運行Time.at(...),您將得到相同的絕對日期/時間。當我說「絕對日期/時間」時,我的意思是它的UTC時間將是相同的,很可能系統會將其顯示在當地時區,但這正是您想要的。