[英]How to get the client timezone id for c# timezoneinfo class from client side using javascript
我想从 JavaScript 获取客户端时区 id 来解析 c# TimezoneInfo 类。并转换为 utc 时间。我有这个
var timezone = String(new Date());
return timezone.substring(timezone.lastIndexOf('(') + 1).replace(')', '').trim();
问题是它会在一段时间内返回 javascript 时区 CST。 是否有正确的方法来获取时区 ID
和来自 c#
TimeZoneInfo ZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneIdFromJavascript);
return TimeZoneInfo.ConvertTimeToUtc(Datetime, ZoneInfo);'
TimeZoneInfo
使用Windows时区标识符。 它们不会匹配来自 JavaScript 的任何东西。 请阅读时区标签维基。TimeZoneInfo
做得更好。我发现的最安全的方法是仅使用 UTC 的偏移量而不是标识符名称。
从 Javascript 我发送这个:
var dateString = new Date();
var offset = dateString.getTimezoneOffset();
在 C# 上,我将此偏移量映射到具有相同偏移量的第一个时区:
string jsNumberOfMinutesOffset = ViewModel.offset; // sending the above offset
var timeZones = TimeZoneInfo.GetSystemTimeZones();
var numberOfMinutes = Int32.Parse(jsNumberOfMinutesOffset)*(-1);
var timeSpan = TimeSpan.FromMinutes(numberOfMinutes);
var userTimeZone = timeZones.Where(tz => tz.BaseUtcOffset == timeSpan).FirstOrDefault();
这为我们提供了从客户端接收到的具有相同偏移量的第一个时区。 由于有多个时区具有相同的偏移量,因此它并不总是与用户的确切时区匹配,但从 UTC 转换为本地时间表示是完全可靠的。
我希望它可以帮助某人:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.