亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Angular 5 和 .NET Core 2.1 API:獲取用戶時區的當前時間

Angular 5 和 .NET Core 2.1 API:獲取用戶時區的當前時間

C#
收到一只叮咚 2022-06-12 10:56:53
這可行,但我想知道是否有人有更好的方法。目標:獲取客戶端的 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 日期,它應該會自動顯示在瀏覽器的本地時區中。



查看完整回答
反對 回復 2022-06-12
?
守候你守候我

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));


查看完整回答
反對 回復 2022-06-12
  • 2 回答
  • 0 關注
  • 328 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號