这是可行的,但我想知道是否有人有更好的方法。
目标:
获取客户端的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
}因此,如果添加时区偏移头,服务器将能够将DateTimes转换为客户端的本地时间,否则,DateTimes将在UTC中给出。有更好的办法吗?我应该把所有的UTC都放在服务器上,然后在客户端执行UTC到本地的转换吗?
发布于 2018-12-12 19:14:18
以UTC的形式发送每个时间戳给客户端的shure。类似于"2018-12-12T20:13:00.000Z“。如果将其转换为JavaScript日期,则应在浏览器的本地时区自动显示。
发布于 2018-12-12 19:06:42
您可以通过TimeZoneConverter安装NuGet。
然后,如果您设法将像Europe/Berlin这样的时区信息传入标头,则可以在后端执行以下操作:
using TimeZoneConverter;
...
string timezoneString = "Europe/Berlin";
TimeZoneInfo timezone = TZConvert.GetTimeZoneInfo(timezoneString);
Console.WriteLine(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timezone));https://stackoverflow.com/questions/53748919
复制相似问题