【问题标题】:Getting an NSDateComponents instance from an NSDate (Or DateTime) in MonoTouch在 MonoTouch 中从 NSDate(或 DateTime)获取 NSDateComponents 实例
【发布时间】:2013-01-16 04:49:01
【问题描述】:

我需要得到一个完全定义的NSDateComponents 实例(即设置了日历、时区和实际日期值等),以用作EKReminderStartDateComponentsDueDateComponents 值。

有很多answers here on SO 解释了如何从 obj-c 中的日历实例执行此操作。以及开源项目doing the same thing

但是我似乎无法弄清楚如何在 MT 中做同样的事情。 NSCalendar 类不公开任何与 components:fromDate: 选择器相关的方法。

人们是如何处理 MT 中的 DateTime/NSDate -> NSDateComponents 的?

【问题讨论】:

    标签: ios xamarin.ios


    【解决方案1】:

    这些 API 在 MonoTouch 中实际上是缺失的 - 但我现在添加了它们,以便您在未来的版本中找到它们。

    同时您可以手动拨打components:fromDate:

    var calendar = new NSCalendar (NSCalendarType.Gregorian);
    var date = (NSDate) DateTime.Now;
    var ptr = Messaging.IntPtr_objc_msgSend_UInt32_IntPtr (calendar.Handle, Selector.GetHandle ("components:fromDate:"), (uint) (NSCalendarUnit.Year | NSCalendarUnit.Month), date.Handle);
    var comps = new NSDateComponents (ptr);
    
    Console.WriteLine (comps.Year);
    

    【讨论】:

    • 谢谢。我最终手动构建了一个NSDateComponents 并设置了日历、时区和所有日期/时间整数属性。 Calendar 和 Timezone 来自返回各自默认值的静态 getter。我认为它很好,我只是担心我错过了一些边缘情况,特别是与为什么 obj-c 方法采用那些 NSCalendarUnit 枚举有关,因为我的方法缺少这些信息,因此不能做完全相同的事情。您能看到使用这种方法而不是使用您发布的手动互操作方法的任何问题吗?
    • NSCalendarUnit 值只是为了准确指定您希望将哪些日期值放入日期组件中。在我的示例中,您将获得一个带有年和月(但不是日/小时/分钟/秒/等)的 NSDateComponents。如果您的代码在测试时有效,则应该没有问题(只需确保您在不同的时区进行测试)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多