如何在C#中将日期时间对象指定为中央标准时间或其他时区而不是UTC?

sus*_*har 2 c# datetime

我正在开发一个Web应用程序,用户呼叫客户,客户可能在不同的国家,所以我也需要考虑时区.所以我有两个输入控件,如"Next FollowUp DateTime"和"Next Followup Time Zone".

因此,用户将询问客户下一个跟进日期时间和TimeZone是什么.比方说NextFollowUpDateTime是"21/3/2017 10:40 PM","Next Followup TimeZone"是CST(中央标准时间)

因此,在保存到数据库时,我想将其转换为选定的TimeZone,让我们说CST.我无法将日期时间对象指定为CST.

以下我试过:

DateTime dateTime = DateTime.SpecifyKind(NextFollowupDatetime, DateTimeKind.Utc);
return TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime,”Central Standard Time”);
Run Code Online (Sandbox Code Playgroud)

在这里,我可以将日期时间指定为UTC,以便将其转换为另一个时区.但我也想指定其他时区.我的目的是将选定的日期时间转换为选定的时区(CST或其他),然后将其转换为UTC,然后将其保存到数据库.

Jon*_*eet 6

DateTime 本身只有三种:

  • 未指定(无特定时区)
  • 世界标准时间
  • 本地(系统本地)

它没有处于特定的非UTC,非本地时区的概念.

如果你想从一个时区转换成另一种,你可以调用TimeZoneInfo.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo),并在通过DateTimeUnspecified亲切.

但是,我个人 - 我在这里有偏见 - 建议使用我的Noda Time库而不是使用BCL类型.

通过这种方式,您可以创建一个ZonedDateTime"知道"它在原始时区中,然后用于ZonedDateTime.InZone创建一个"知道"它在另一个时区的新值.您的代码在特定区域中的哪些值与一般意义上的"本地"(即未锚定到任何时区)中的值相比将更清晰,因为它们是LocalDateTime值.