我正在转换我的应用程序以支持Xamarin.iOS的新统一API。在这里,我想使用我的旧可空DateTime?
来设置datepicker的日期:
datePicker.SetDate (someNullableDate, false);
编译时出现以下错误:
错误CS1502:最佳重载方法匹配 `UIKit.UIDatePicker.SetDate(Foundation.NSDate,bool)'有一些无效 参数(CS1502)
和
错误CS1503:参数
#1' cannot convert
System.DateTime?' 表达式以输入`Foundation.NSDate'(CS1503)
这是我实例化 someNullableDate 的方式:
DateTime? someNullableDate = DateTime.SpecifyKind (someNSDate, DateTimeKind.Unspecified);
在此我将其转换回NSDate
:
if (someNullableDate != null && someNullableDate.HasValue) {
DateTime someDate = someNullableDate.GetValueOrDefault ();
NSDate someNSDate = DateTime.SpecifyKind (someDate, DateTimeKind.Utc);
}
目前所有转化都会引发错误。经典的API能够为我做转换,但由于数据丢失,统一API不再这样做了。详细Xamarin states:
Unified API不提供NSDate之间的隐式转换 和.NET DateTime,因为它不是无损转换。阻止 与DateTimeKind.Unspecified相关的错误转换.NET DateTime 在转换为NSDate之前到本地或UTC。
Xamarin provided以下扩展方法:
public static DateTime NSDateToDateTime(this NSDate date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return reference.AddSeconds(date.SecondsSinceReferenceDate);
}
public static NSDate DateTimeToNSDate(this DateTime date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return NSDate.FromTimeIntervalSinceReferenceDate(
(date - reference).TotalSeconds);
}
我尝试在扩展方法的参数中添加Nullable<DateTime>
,但这会导致更多错误。
使用提供的扩展方法应该可以转换DateTime
但是如何为可以为空的DateTime
进行转换?
答案 0 :(得分:-1)
我遇到了同样的问题。错误是它无法转换Unspecified DateTimeKind,因此解决方案是首先将DateTime转换为 UTC ,或 LocalTime :
if (someNullableDate != null && someNullableDate.HasValue) {
DateTime someDate = someNullableDate.Value.ToUniversalTime();
NSDate someNSDate = (NSDate)DateTime.SpecifyKind(someDate, DateTimeKind.Utc);
}