gpt4 book ai didi

c# - 切换到 Unfied API 后将可为空的 DateTime 转换为 NSDate

转载 作者:行者123 更新时间:2023-12-01 16:15:56 27 4
gpt4 key购买 nike

我正在转换我的应用程序以支持 Xamarin.iOS 的新统一 API。在这里,我想使用旧的可为空的 DateTime? 来设置日期选择器的日期:

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 convertSystem.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 :

The Unified API does not provide an implicit conversion between NSDate and .NET DateTime because it's not a lossless conversion. To prevent errors related to DateTimeKind.Unspecified convert the .NET DateTime to local or UTC before casting to NSDate.



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 ,您将如何进行转换?

最佳答案

我有同样的问题。错误是它不能转换Unspecified DateTimeKind,所以解决方案是先将DateTime转换为 UTC ,或者 LocalTime :

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

关于c# - 切换到 Unfied API 后将可为空的 DateTime 转换为 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27925179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com