gpt4 book ai didi

iphone - 当时区支持设置为系统时区以外的其他内容时,EventKit 会截断结果集

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:32 27 4
gpt4 key购买 nike

在 iOS 设置应用程序中,有一个名为“时区支持”的设置(设置 > 邮件、联系人、日历 > 时区支持)。如果此设置为OFF,则没有问题。此外,如果此设置为 ON,但时区支持 (TZS) 时区设置为当前值 systemTimeZone , 也没有问题。 唯一出现问题的情况是设置为 ON 并且 TZS 时区设置为 systemTimeZone 以外的时区.

在最后一种情况下,eventsMatchingPredicate: 返回的数组方法(在 EKEventStore 类的实例上)可预见地被截断。给定一个日期范围内所有事件的查询,EKEventStore 的实例无法返回介于查询范围开始和 TZS 时区第一个午夜之间的任何事件。

举个例子,要检索 2013 年 3 月 18 日的所有事件,可以在 systemTimeZone 中查询 2013 年 3 月 18 日凌晨 12 点到 2013 年 3 月 19 日凌晨 12 点之间的所有事件。 .假设 systemTimeZone是 PDT,这将导致查询 3/18/2013 早上 7 点 GMT 到 3/19/2013 早上 7 点 GMT(因为 PDT 是 GMT - 7 小时)。此查询在 TZS OFF 以及 TZS ON 并设置为 PDT 时工作正常。但是,如果 TZS 为 ON 并设置为 EDT,则结果数组中将从查询范围开始到 EDT 的第一个午夜之间的所有事件都将丢失。由于 EDT 为 GMT - 4 小时,因此查询范围内 EDT 的第一个午夜为 3/19/2013 4AM GMT。格林威治标准时间 2013 年 3 月 18 日早上 7 点和格林威治标准时间 2013 年 3 月 19 日早上 4 点之间的所有事件都将丢失,生成的数组将只包含格林威治标准时间 2013 年 3 月 19 日早上 4 点和格林尼治标准时间 2013 年 3 月 19 日早上 7 点之间的事件。

此结果是 100% 可预测的,无论是在模拟器中还是在物理 iOS 设备上(使用我尝试过的任何 TZS 时区)。我在 iOS 6 和 iOS 6.1 上测试过,没有明显的行为差异。关于为什么这可能是预期的 API 行为,我有什么理由不明白吗?此外,尽管进行了大量搜索,但似乎没有一个公共(public)(甚至私有(private))API 允许开发人员确定 TZS 是打开还是关闭,更不用说用户设置的任何时区了——让人很难想到一个很好的解决方法...(显然,您可以通过增加每个查询的范围来确保您不会错过任何事件,以便它始终包含任何可能的 TZS 时区的午夜。然后,您可以过滤掉无关的事件在代码中。但是,出于显而易见的原因,除非万不得已,否则我想避免使用这样的 hacky 方法。)

最佳答案

我有一个类似的问题,结果中没有返回给定 NSDate 范围第一天的某些事件。我发现 [EKEventStore eventsMatchingPredicate] 似乎受默认时区的影响。这个变通办法最终帮我解决了问题:

NSTimeZone *savedTimeZone = [NSTimeZone defaultTimeZone];
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSPredicate *predicate = [eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendars];
[NSTimeZone setDefaultTimeZone:savedTimeZone];
NSArray *events = [eventStore eventsMatchingPredicate:predicate];

我希望这对您的具体情况也有帮助(在我的情况下,用户的日期/时间时区与应用程序中的默认时区不同,在您的情况下,日历时间支持已打开,但它是可能与“predicateForEventsWithStartDate”的情况相同)

在我看来,这是 [EKEventStore eventsMatchingPredicate] 中的错误或设计缺陷,因为给定的 NSDates 已经是“无时区”的了,因为它们表示时间点,没有时间区相关。

关于iphone - 当时区支持设置为系统时区以外的其他内容时,EventKit 会截断结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625297/

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