我目前正在网站上注册表格上,我需要确切地了解如何为活动的用户-客户端获取时区偏移量,以计算其实际本地时间(无需DST)。
我已经尝试使用功能getTimeZoneOffset()来执行JS方法,但是由于它依赖于用户的时间设置,因此似乎不建议这样做。 (我更改了机器上的时钟时间并尝试了)
因此,用户时间设置的任何更改都会更改时区偏移。
我还可以实现其他任何“鲁棒”和“可信赖”方法来获取时区偏移量,然后将其应用到我的C#代码中。
最好。
答案 0 :(得分:1)
这里有很多值得放松的地方,所以我将逐点讨论您的问题:
...我需要确切地知道如何为活跃用户获取时区偏移...
您无法获得 时区偏移,您只能获得 a 时区偏移。也就是说,您获得的时区偏移量仅针对单个时间点。由于标准时间的变化以及夏令时,时区会经历转换。当您在JavaScript getTimeZoneOffset
对象上调用Date
时,该Date
对象表示一个特定的时间点(默认为“现在”)。因此,返回的偏移量是针对该特定时间点的。不能保证先前的时间点或将来的时间点将使用相同的偏移量。仅在将偏移量与特定时间戳配对时(例如,使用DateTimeOffset模式记录活动),将偏移量发送到服务器才有用。
也请阅读the timezone tag wiki的“时区!=偏移”部分。
...计算他的实际本地时间...
您无需进行计算。 new Date().toString()
将为您提供用户的实际本地时间。如果需要特定格式的输出,可以使用Luxon,Date-fns,Moment.js等库,也可以使用函数like this one。>
...(无需DST)。
人们之所以这么说是因为他们认为这样可以消除复杂性,但是事实是- 这取决于您 。夏令时是否适用(何时适用)取决于当地政府机构,该机构负责规范所讨论的特定时区。如果DST适用于您所讨论的时间所在的用户的本地时间,并且如果您决定不考虑这一点,那么您的结果通常会减少一个小时。
幸运的是,所有辛苦的工作已经为您完成。许多人努力工作以确保time zone databases保持准确。消耗他们的精力比尝试解决问题要容易得多。
此外,即使您认为自己不关心夏时制,也要考虑到许多时区的转换是由其标准时间造成的。
...
getTimeZoneOffset()
,但似乎不建议这样做,因为它依赖于用户的时间设置。 ...
它依赖于用户时间设置不是问题。不建议这样做的一般原因是因为我已经描述了“时区!=偏移”问题。如果您想知道用户的时区,则需要一个时区标识符,例如"America/Los_Angeles"
,而不是480
的偏移量。
...因此,用户时间设置的任何更改都会更改时区偏移。
用户可以控制自己的计算机,并且可以将时区设置为所需的任何时间。通常人们将时区设置为当地时间,以使他们看到的时钟正确。人们使用其他时区并不是闻所未闻,例如,如果他们在国外工作,并希望将工作日与母公司的本地时间保持一致(尽管我个人会觉得很讨厌)。无论如何,这不是您可以合理控制的。
...还有其他我可以实现的“健壮”和“可信赖”方法来获取时区偏移量,然后将其应用于我的C#代码中。
如果需要用户的本地时区,请use one of the methods listed here。
但是,我不确定您认为“健壮和值得信赖”的标准是什么。上述方法没有什么特别值得信赖的……
您可能要考虑的一件事是,如果您实际上不希望使用用户的本地时区,而是希望使用特定位置的本地时间。尽管这些看起来像是同一件事,但并非总是如此。您可以使用one of the methods listed here导出位置的本地时区标识符。