我正在將我的應用程序轉換爲支持Xamarin.iOS的新統一API。在這裏,我想用我的舊可空DateTime?
設置的日期選擇日期:切換到Unfied API後將可空的DateTime轉換爲NSDate
datePicker.SetDate (someNullableDate, false);
在編譯我收到以下錯誤:
Error CS1502: The best overloaded method match for `UIKit.UIDatePicker.SetDate(Foundation.NSDate, bool)' has some invalid arguments (CS1502)
和
Error CS1503: Argument
#1' cannot convert
System.DateTime?' expression to type `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:
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
?
你有你的代碼有問題。 SpecifyKind返回一個DateTime而不是一個NSDate –
對不起,您還必須將DateTime從SpecifyKind方法轉換爲NSDate。 –