首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角5和.NET核心2.1API:获取用户时区中的当前时间

角5和.NET核心2.1API:获取用户时区中的当前时间
EN

Stack Overflow用户
提问于 2018-12-12 18:07:32
回答 2查看 5.9K关注 0票数 3

这是可行的,但我想知道是否有人有更好的方法。

目标:

获取客户端的DateTime偏移量,并在客户端的本地时间返回DateTime值。

我所做的:

在前端,我创建了一个自定义头并在请求中传递了它.

代码语言:javascript
复制
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时间转换为本地时间。

代码语言:javascript
复制
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
  }

因此,如果添加时区偏移头,服务器将能够将DateTimes转换为客户端的本地时间,否则,DateTimes将在UTC中给出。有更好的办法吗?我应该把所有的UTC都放在服务器上,然后在客户端执行UTC到本地的转换吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-12 19:14:18

以UTC的形式发送每个时间戳给客户端的shure。类似于"2018-12-12T20:13:00.000Z“。如果将其转换为JavaScript日期,则应在浏览器的本地时区自动显示。

票数 1
EN

Stack Overflow用户

发布于 2018-12-12 19:06:42

您可以通过TimeZoneConverter安装NuGet。

然后,如果您设法将像Europe/Berlin这样的时区信息传入标头,则可以在后端执行以下操作:

代码语言:javascript
复制
using TimeZoneConverter;
...
string timezoneString = "Europe/Berlin";
TimeZoneInfo timezone = TZConvert.GetTimeZoneInfo(timezoneString);
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timezone));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53748919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档