Asp.net

如何在網頁中將 UTC 時間顯示為當地時間?

  • June 10, 2018

我有一個保存時間為 UTC 的數據庫。這個時間可以顯示在網頁中,所以我被要求在頁面中顯示為當地時間,因為它可以從任何國家/地區查看。一位同事提到了有關從目前執行緒(在伺服器上)獲取國家/地區設置的內容,但我找不到任何詳細資訊。我想做的事可能嗎?

如果您(和您的網站)對 javascript 感到滿意,那麼有一種非常簡單的方法可以完成此操作。

首先,在伺服器端,您可以將 UTC 日期/時間格式化為 RFC 3339 格式(除其他協議外,icalendar 使用的網際網路時間標準)。RFC 3339 的基本語法是:

YYYY-MM-DDTHH:MM:SS

這樣,我在哪裡,時間將是:

2010-05-04T05:52:33

但是當時間不是本地時間,而是 UTC 時,您可以Z在末尾添加一個來表示這一點。因此,就我而言,由於我距格林威治標準時間為 -0500 小時,因此上面的同一時間將是:

2010-05-04T10:52:33Z

因此,首先您讓伺服器將上述內容輸出到您網頁的 javascript。然後,javascript 可以解析該時間戳,並將輸出調整到瀏覽器時區的日期和時間(由託管瀏覽器的電腦確定)。您應該記住,如果使用者來自東京並且正在西班牙查看您的網站,他們將看到東京時間的時間戳,除非他們調整了電腦的時鐘。

所以javascript將是:

   var time_string_utc = some_server_variable; // timestamp from server
   var time_string_utc_epoch = Date.parse(time_string_utc);
   var time_utc = new Date();
   time_utc.setTime(time_string_utc_epoch);

此時,您已將 javascript 日期對象設置為您的 UTC 時間戳。對上面發生的事情的快速解釋:

第一個變數假定您已將時間戳字元串從伺服器傳遞給該變數。

第二個變數使用該Date.parse()方法將字元串轉換為紀元時間戳。

第三個變數創建未設置的 Date 對象。

最後一行使用setTime方法,它從一個紀元時間戳設置一個 Date 對象。

現在您有了對象,您可以根據需要將其輸出給使用者。作為一個簡單的實驗,您可以使用:

document.write(time_utc);

其中,如果您在我的時區使用 UTC 時間戳,我開始使用的是:

2010-05-04T10:52:33Z

會給:

Tue May 04 2010 05:52:33 GMT-0500 (CST)

但是您可以使用各種 javascript 方法將時間格式化為更令人愉悅的內容。

無需猜測使用者的國家,甚至無需調整您的時間戳,只要您信任使用者的本地瀏覽器/電腦時區即可。

再次,簡短的版本:

   var time_string_utc = some_server_variable; // UTC time from server
   var time_string_utc_epoch = Date.parse(some_server_variable);
   var time_utc = new Date();
   time_utc.setTime(time_string_utc_epoch);
   document.write(time_utc);

引用自:https://stackoverflow.com/questions/2764458