Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

datetime - .NET PCL exception while converting time from UTC to specified TimeZone

I am developing a project in Xamarin Studio using C#. Its a .net PCL project and my profile is 78. My problem is, i am unable to convert a DateTime from UTC to specified timezone. I am using below code to convert DateTime from UTC to specified local TimeZone.

   DateTime dateTime = (TimeZoneInfo.ConvertTime (DateTime.SpecifyKind (DateTime.UtcNow, DateTimeKind.Utc), profile.TimeZone));

I am getting below exception

The Kind property of the dateTime parameter is DateTimeKind.Utc, but the sourceTimeZone parameter does not equal TimeZoneInfo.Utc.

In PCL TimeZoneInfo.ConvertTime doesn't have a parameter for specifying the TimeZoneInfo sourceTimeZone. It has only 2 overloads with below parameters.

ConvertTime(DateTime, TimeZoneInfo) & ConvertTime(DateTimeOffset, TimeZoneInfo)

TimeZoneInfo exist only to specify destination TimeZoneInfo.

Also it doesn't have TimeZoneInfo.ConvertTimeFromUtc, TimeZoneInfo.ConvertTimeToUtc Methods.

Please someone help me to fix this.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

To add to Hans's comment:

This is all entirely by design. Timezone conversions requires an operating system with a database that keeps track of the timezone rules across the world. Available on a desktop class machine, not available on limited devices like a phone. Without the database, you can only know something about UTC and the timezone for which the device was configured. You cannot use PCL if this is a requirement, using a commercial web service to make the conversion for you would be a workaround.

Have a look at Noda Time. This is a Date/Time library for .NET which has its own time zone data so it doesn't have to rely on the OS. It also supports PCLs.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...