Cha*_*eek 4 c# timezone datetime
我想显示将根据用户的时区管理的事件的日期和时间。要检查时区,我将系统时区更改为另一个时区,但我的代码仍在获取本地时区。这是我的代码
我正在使用 Cassendra 数据库和 C# .NET MVC
DateTime startTimeFormate = x.Startdate;
DateTime endTimeFormate = x.Enddate;
TimeZone zone = TimeZone.CurrentTimeZone;
DateTime startTime = zone.ToLocalTime(startTimeFormate);
DateTime endTime = zone.ToLocalTime(endTimeFormate);
Run Code Online (Sandbox Code Playgroud)
要将 转换UTC DateTime为您的Local DateTime,您必须使用TimeZoneInfo如下:
DateTime startTimeFormate = x.Startdate; // This is utc date time
TimeZoneInfo systemTimeZone = TimeZoneInfo.Local;
DateTime localDateTime = TimeZoneInfo.ConvertTimeFromUtc(startTimeFormate, systemTimeZone);
Run Code Online (Sandbox Code Playgroud)
此外,如果您想转换UTC DateTime为特定于用户的,Local DateTime请执行以下操作:
string userTimeZoneId = "New Zealand Standard Time";
TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(userTimeZoneId);
DateTime userLocalDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, userTimeZoneId);
Run Code Online (Sandbox Code Playgroud)
注:TimeZone在.NET是过时的,现在,它已经被废弃了。而是使用TimeZoneInfo.
根据TimeZone.CurrentTimeZone 属性的 MSDN 文档,本地时区在第一次调用 TimeZone.CurrentTimeZone 后被缓存。实际上,这意味着只要不支持运行中时区的动态更新,您的代码就应该运行良好。为了立即看到更改,在致电之前TimeZone.CurrentTimeZone您应该致电
TimeZoneInfo.ClearCachedData();
Run Code Online (Sandbox Code Playgroud)
MSDN 文章中对此进行了记录,如下所示:
来电者须知
首次使用 CurrentTimeZone 检索时区信息后,将缓存本地时区数据。如果系统的本地时区随后发生更改,则 CurrentTimeZone 属性不会反映此更改。如果您需要在应用程序运行时处理时区更改,请使用 TimeZoneInfo 类并调用其 ClearCachedData() 方法。