我在时区方面遇到麻烦,我建立的一个类使用以下方法找到用户的本地时区:
Dim Timezone As String = TimeZoneInfo.Local.ToString
Run Code Online (Sandbox Code Playgroud)
然后将其存储在MySQL数据库中。
拉动时区时,我再次将其与用户的本地时区进行比较,以将时间转换为本地时区:
Dim D_0 As DateTime
Dim D_1 As DateTime
Dim Event_Timezone As TimeZoneInfo
Dim User_Timezone As TimeZoneInfo
Event_Timezone = TimeZoneInfo.FindSystemTimeZoneById(U_1(5).ToString)
User_Timezone = TimeZoneInfo.Local()
D_0 = TimeZoneInfo.ConvertTime(U_1(i + 4), Event_Timezone, User_Timezone)
D_1 = TimeZoneInfo.ConvertTime(U_1(i + 8), Event_Timezone, User_Timezone)
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:
在本地计算机上找不到时区ID“(UTC-05:00)美国东部时间(美国和加拿大)”。
这是一个令人困惑的错误,因为这是本地计算机仅在几秒钟前指定的时区。它几乎可以与其他所有时区一起使用。我应该有更好的方法吗?有谁知道为什么本地计算机在几秒钟后找不到本地计算机定义的时区?
你调用ToString()上TimeZoneInfo-即不给ID,它给人的显示名称。在英国文化中,它们通常是相同的,但并非必须如此,通常也不会在非英语文化中。
基本上,您应该坚持TimeZoneInfo.Local.Id而不是坚持TimeZoneInfo.Local.ToString()。
(请注意,使用Windows系统时区标识符会使您非常依赖Windows。您可能要考虑使用TZDB时区信息,例如通过我的Noda Time项目。但这是一个单独的决定。)