为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 277 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信