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

时间:2017-03-20 16:35:06

标签: 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”);

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

1 个答案:

答案 0 :(得分:6)

DateTime本身只有三种:

  • 未指定(无特定时区)
  • UTC
  • 本地(系统本地)

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

如果您想要从一个时区转换为另一个时区,可以拨打TimeZoneInfo.ConvertTime(DateTime, TimeZoneInfo, TimeZoneInfo)并传入DateTime Unspecified种类。

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

这样你就可以创建一个ZonedDateTime,其中"知道"它在原始时区中,然后使用ZonedDateTime.InZone创建一个新值,它知道"它在另一个时区。对于特定区域中的哪些值而言,您的代码将更加清晰。" local"在一般意义上(即没有锚定到任何时区),因为它们是LocalDateTime值。