這可行,但我想知道是否有人有更好的方法。目標:獲取客戶端的 DateTime 偏移量并返回客戶端本地時間的 DateTime 值。我做了什么:在前端,我創建了一個自定義標頭并將其傳遞到請求中。export class ItemService { baseUrl = environment.apiUrl; httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', 'TimeZone-Offset': `${new Date().getTimezoneOffset()}` }) } constructur(private authHttp: HttpClient) { } getItems() { return this.authHttp.get<Item[]>(this.baseUrl + 'items', { headers: this.httpOptions.headers }); }}然后在后端,我拉入標頭值,將其轉換為整數,然后使用該AddMinutes功能將 UTC 時間轉換為本地時間。public class ItemsController : Controller{ [HttpGet] public async Task<IActionResult> GetItems() { var currentTime = DateTime.UtcNow.AddMinutes(int.Parse( Request.Headers["TimeZone-Offset"] != StringValues.Empty ? Request.Headers["TimeZone-Offset"][0] : "0")); // ...logic to return items }因此,如果添加了 TimeZone-Offset 標頭,服務器將能夠將 DateTimes 轉換為客戶端的本地時間,否則,DateTimes 將以 UTC 給出。有沒有更好的辦法?我是否應該將所有 UTC 都留在服務器上,然后在客戶端進行 UTC 到本地轉換?
2 回答

斯蒂芬大帝
TA貢獻1827條經驗 獲得超8個贊
確保將每個時間戳作為 UTC 發送給客戶端。類似于“2018-12-12T20:13:00.000Z”。如果將其轉換為 JavaScript 日期,它應該會自動顯示在瀏覽器的本地時區中。

守候你守候我
TA貢獻1802條經驗 獲得超10個贊
您可以通過 NuGet安裝TimeZoneConverter 。
然后,如果您設法在標頭中傳遞時區信息,例如Europe/Berlin,您可以在后端執行以下操作:
using TimeZoneConverter;
...
string timezoneString = "Europe/Berlin";
TimeZoneInfo timezone = TZConvert.GetTimeZoneInfo(timezoneString);
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timezone));
- 2 回答
- 0 關注
- 328 瀏覽
添加回答
舉報
0/150
提交
取消