【发布时间】:2015-01-13 15:07:06
【问题描述】:
我正在转换我的应用程序以支持 Xamarin.iOS 的新统一 API。在这里,我想使用我的旧可空 DateTime? 来设置日期选择器的日期:
datePicker.SetDate (someNullableDate, false);
编译时出现以下错误:
错误 CS1502:最佳重载方法匹配 `UIKit.UIDatePicker.SetDate(Foundation.NSDate, bool)' 有一些无效 论据(CS1502)
和
错误 CS1503:参数
#1' cannot convertSystem.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:
统一 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,您将如何做到这一点?
【问题讨论】:
标签: c# ios datetime xamarin nsdate