C# Angular 5和.NET Core 2.1 API:获取用户的当前时间';s时区
这是有效的,但我想知道是否有人有更好的方法 目标: 获取客户端的DateTime偏移量并返回客户端本地时间中的DateTime值 我所做的: 在前端,我创建了一个自定义头并将其传递到请求中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',
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));