2015-01-13 58 views
1

我正在將我的應用程序轉換爲支持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

回答

-1

我有同樣的問題。該錯誤是,它不能老是轉換不明DateTimeKind,這樣的解決辦法是先轉換日期時間到UTC ,或本地時間

if (someNullableDate != null && someNullableDate.HasValue) { 
    DateTime someDate = someNullableDate.Value.ToUniversalTime(); 
    NSDate someNSDate = (NSDate)DateTime.SpecifyKind(someDate, DateTimeKind.Utc); 
} 
+0

你有你的代碼有問題。 SpecifyKind返回一個DateTime而不是一個NSDate –

+0

對不起,您還必須將DateTime從SpecifyKind方法轉換爲NSDate。 –