我有一个显示用户帐户信息的欢迎页面。有一个时区字段,用户可以在其中选择时区。为了获得更好的用户体验,我猜测用户在浏览器中的时区并将其显示为该字段的默认值。我想使用Moment Timezone时区。更具体地说,我打电话给moment.tz.guess()
。对我来说,这将返回“America / Los_Angeles”。我将用户选择的时区(或浏览器在未触及时区字段时推断的默认时区)传递给服务器,服务器通过调用{为该用户创建TimeZoneInfo
对象{1}}。
问题是“America / Los_Angeles”不是.NET识别的时区ID,也不是时刻时区返回的任何其他时区字符串。 Here is a list of the time zone IDs recognized by .NET。因此,如果用户看到默认时区对他们来说是正确的并且不更改它,那么.NET无法识别的时区字符串将传递回服务器并且无法解析。时区字段是一个下拉菜单,其中所有值都来自.NET,因此如果用户确实选择了其中一个时区,它将正常工作。
有没有人知道解决这个问题的方法?我现在可以想到三种一般解决方案:
1)在TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
返回的所有时区ID之间创建所有可能值之间的映射。不理想,但如果已经存在那将是伟大的。我不相信时刻 - 时区支持这个。
2)也许moment.tz.guess()
或其他一些.NET库有一种使用moment-timezone生成的信息创建TimeZoneInfo
对象的方法。
3)使用不同的方法从浏览器获取用户的时区。这样做的一种方法是做一些utc抵消工作。
重要的是,这只是一个猜测 - 它不需要100%准确,因为用户可以选择正确的时区,如果它是错误的。我只是想要一种简单的方法来猜测用户的时区ID,以便它可以在服务器端进行解析。