TimeZoneInfo是由本地机器找不到的本地机器定义的?

时间:2013-08-15 13:41:16

标签: vb.net

我遇到时区问题,我构建的课程使用以下方式查找用户的本地时区:

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)美国东部时间(美国和加拿大)'在本地计算机上找不到。

这是一个令人困惑的错误,因为这是本地计算机仅在几秒前指定的时区。它适用于几乎所有其他时区。我有更好的方法吗?有谁知道为什么本地机器几秒钟后找不到本地机器定义的时区?

1 个答案:

答案 0 :(得分:4)

您在TimeZoneInfo上呼叫ToString() - 但未提供ID,而是display name。他们在英国文化中往往是一样的,但他们不一定非常,并且通常不会成为非英国文化。

基本上你应该坚持TimeZoneInfo.Local.Id而不是TimeZoneInfo.Local.ToString()

(请注意,使用Windows系统时区标识符会严重限制Windows。您可能希望考虑使用TZDB时区信息,例如通过我的Noda Time project。 #39;虽然是一个单独的决定。)