如何使用 javascript 从客户端获取 C# 时区信息类的客户端时区 ID
How to get the client timezone id for c# timezoneinfo class from client side using javascript
我想从JavaScript获取客户端时区ID来解析c# TimezoneInfo class。并转换为 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的任何内容。 请阅读时区标签维基。 - 在 JavaScript 中识别用户的时区是不完美的。 您可以使用其中一种方法进行猜测,但这将为您提供IANA时区ID,而不是Windows时区ID。
- 您可以使用我的 TimeZoneConverter 库或此处描述的使用 Noda Time 的方法将 IANA 时区转换为 Windows 时区。 但是,如果您要使用Noda时间,则不妨首先使用IANA时区。 野田时间比
TimeZoneInfo
做得好得多。 - 如果您只想将客户端的本地时间转换为 UTC,那么只需在 JavaScript 的浏览器中执行此操作即可。 然后,您无需知道本地时区实际上是什么。
我发现的最安全的方法是仅使用 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转换为本地时间表示是完全可靠的。
我希望它能帮助某人:)
相关文章:
- 使用 JavaScript 的客户端日期/时间戳一致(考虑时区)
- 计算具有不同时区的服务器和客户端之间的时差
- 如何使用 javascript 从客户端获取 C# 时区信息类的客户端时区 ID
- 如何使用客户端时区将数据库时间戳输出为客户端中的日期戳
- 如何在 PHP 中获取客户端时区
- 使用时刻时区的客户端上的时区字符串
- 服务器和客户端时区上的日期时间差异
- 如何获取客户端的时区
- 如何在 JavaScript 中获取客户端时区
- 如何处理服务器和客户端之间的时区
- 定时器、时区、服务器端时间、客户端倒计时
- 如何获取客户端时区
- 在JSF中-获取客户端的区域设置(以浏览器的时区显示时间)
- 在MVC视图中使用JavaScript将UTC时间转换为客户端浏览器的时区
- 使用javascript / angularjs在客户端浏览器上修复自定义时区
- 如何获取客户端的时区
- javascript new Date(timestamp)是否根据客户端的时区返回日期?
- moment.js和moment.timezone.js -我如何知道客户端时区显示UTC日期在本地tz
- 如何动态设置时区为客户端时区
- 从浏览器获取客户端时区