2

我遇到了时区问题,我建立的一个类使用以下方法查找用户的本地时区:

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) 东部时间(美国和加拿大)”。

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

4

1 回答 1

5

您正在调用ToString()-TimeZoneInfo它没有给出ID,它给出了显示名称。通常它们在英国文化中是相同的,但它们不一定是,而且通常不会在非英语文化中。

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

(请注意,使用 Windows 系统时区标识符会将您严重锁定到 Windows。您可能需要考虑使用 TZDB 时区信息,例如通过我的Noda Time 项目。不过,这是一个单独的决定。)

于 2013-08-15T13:42:58.500 回答