我遇到时区问题,我构建的课程使用以下方式查找用户的本地时区:
Dim Timezone As String = TimeZoneInfo.Local.ToString
然后将其存储在MySQL DB中。
当我拉出时区时,我会再次将其与用户的本地时区进行比较,以将时间转换为本地时区:
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)
这会返回以下错误:
时区ID'(UTC-05:00)美国东部时间(美国和加拿大)'在本地计算机上找不到。
这是一个令人困惑的错误,因为这是本地计算机仅在几秒前指定的时区。它适用于几乎所有其他时区。我有更好的方法吗?有谁知道为什么本地机器几秒钟后找不到本地机器定义的时区?
答案 0 :(得分:4)
您在TimeZoneInfo
上呼叫ToString()
- 但未提供ID,而是display name。他们在英国文化中往往是一样的,但他们不一定非常,并且通常不会成为非英国文化。
基本上你应该坚持TimeZoneInfo.Local.Id
而不是TimeZoneInfo.Local.ToString()
。
(请注意,使用Windows系统时区标识符会严重限制Windows。您可能希望考虑使用TZDB时区信息,例如通过我的Noda Time project。 #39;虽然是一个单独的决定。)