Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Angular 5和.NET Core 2.1 API:获取用户的当前时间';s时区_C#_Angular_Datetime_Asp.net Core 2.1 - Fatal编程技术网

C# Angular 5和.NET Core 2.1 API:获取用户的当前时间';s时区

C# Angular 5和.NET Core 2.1 API:获取用户的当前时间';s时区,c#,angular,datetime,asp.net-core-2.1,C#,Angular,Datetime,Asp.net Core 2.1,这是有效的,但我想知道是否有人有更好的方法 目标: 获取客户端的DateTime偏移量并返回客户端本地时间中的DateTime值 我所做的: 在前端,我创建了一个自定义头并将其传递到请求中 export class ItemService { baseUrl = environment.apiUrl; httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json',

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

目标:

获取客户端的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 });
  }
}
因此,如果添加了时区偏移标头,服务器将能够将日期时间转换为客户端的本地时间,否则,日期时间将以UTC表示。有更好的办法吗?我是否应该将所有UTC都保留在服务器上,然后在客户端执行UTC到本地的转换?

您可以通过NuGet安装。
然后,如果您设法在报头中传递一个时区信息,如
欧洲/柏林
,您可以在后端执行以下操作:

using TimeZoneConverter;
...
string timezoneString = "Europe/Berlin";
TimeZoneInfo timezone = TZConvert.GetTimeZoneInfo(timezoneString);
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timezone));

让舒尔将每个时间戳作为UTC发送给客户。类似于“2018-12-12T20:13:00.000Z”。如果您将其转换为JavaScript日期,它将自动显示在浏览器的本地时区。

我认为您在这里混合了IANA时区和Windows时区。TimeZoneInfo使用Windows中的timeZoneId。类似于“西欧标准时间”。“欧洲/柏林”是IANA时区。@keuleJ谢谢!你是对的,因为我的操作系统,我碰巧为我工作。编辑为使用TimeZoneConverter。这就是我一直在争论的。。。这就是我的应用程序的实际功能。然而,我喜欢能够在客户端的本地时间发送回DateTime的想法,因为一些API调用服务(如Postman)没有为您进行转换的功能。显然,如果最终用户正在为API创建自己的接口,那么他们应该能够自己进行转换。这只是我一直在思考的问题。然而,我特别问了这个关于角度的问题,你可能是对的!嗨,杰德。我认为最好在服务器端以UTC格式保存日期时间。然后在客户端转换为本地(您可以使用矩.js)。在我所有的项目中,我都使用这种情况。
using TimeZoneConverter;
...
string timezoneString = "Europe/Berlin";
TimeZoneInfo timezone = TZConvert.GetTimeZoneInfo(timezoneString);
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timezone));