将时间从UTC转换为指定的TimeZone时出现.NET PCL异常

sub*_*bha 4 .net timezone datetime portable-class-library

我正在使用C#在Xamarin Studio中开发一个项目.它是一个.net PCL项目,我的个人资料是78.我的问题是,我无法将DateTime从UTC转换为指定的时区.我使用下面的代码将DateTime从UTC转换为指定的本地TimeZone.

   DateTime dateTime = (TimeZoneInfo.ConvertTime (DateTime.SpecifyKind (DateTime.UtcNow, DateTimeKind.Utc), profile.TimeZone));
Run Code Online (Sandbox Code Playgroud)

我正在低于例外

dateTime参数的Kind属性是DateTimeKind.Utc,但sourceTimeZone参数不等于TimeZoneInfo.Utc.

在PCL TimeZoneInfo.ConvertTime中没有用于指定的参数TimeZoneInfo sourceTimeZone.它只有2个带有以下参数的重载.

ConvertTime(DateTime,TimeZoneInfo)和ConvertTime(DateTimeOffset,TimeZoneInfo)

TimeZoneInfo仅用于指定目标TimeZoneInfo.

它也没有TimeZoneInfo.ConvertTimeFromUtc, TimeZoneInfo.ConvertTimeToUtc方法.

请有人帮我解决这个问题.

Dan*_*ted 5

添加Hans的评论:

这完全是设计的.时区转换需要一个带有数据库的操作系统,该数据库可跟踪全球的时区规则.可在台式机上使用,但不适用于手机等有限设备.如果没有数据库,您只能知道有关UTC和设备配置的时区的信息.如果这是一项要求,则无法使用PCL,使用商业Web服务为您进行转换将是一种解决方法.

看看Noda Time.这是.NET的日期/时间库,它有自己的时区数据,因此不必依赖操作系统.它还支持PCL.