这可行,但我想知道是否有人有更好的方法。目标:获取客户端的 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 关注
- 277 浏览
添加回答
举报
0/150
提交
取消