我正在开发一个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,然后将其保存到数据库.
DateTime 本身只有三种:
它没有处于特定的非UTC,非本地时区的概念.
如果你想从一个时区转换成另一种,你可以调用TimeZoneInfo.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo),并在通过DateTime与Unspecified亲切.
但是,我个人 - 我在这里有偏见 - 建议使用我的Noda Time库而不是使用BCL类型.
通过这种方式,您可以创建一个ZonedDateTime"知道"它在原始时区中,然后用于ZonedDateTime.InZone创建一个"知道"它在另一个时区的新值.您的代码在特定区域中的哪些值与一般意义上的"本地"(即未锚定到任何时区)中的值相比将更清晰,因为它们是LocalDateTime值.