gpt4 book ai didi

objective-c - EKEventStore 时区不是 GMT

转载 作者:行者123 更新时间:2023-11-29 11:17:21 25 4
gpt4 key购买 nike

我正在尝试使用 eventsMatchingPredicate: 从 EKEventStore 的实例中检索一天的所有事件,但据我所知,NSDate 对象默认设置为 GMT,而 EKEventStore 不是。所以我的问题是如何更改 EKEventStore 的时区或调整 NSDate 对象,以便每个时区的时间都不会关闭?

例如,我在 GMT -0600,在我用于日历 UI 的 TKCalendarMonthView 中单击 1 月 16 日和 17 日会在这两个日期显示马丁路德金纪念日。开始时间是 1 月 16 日早上 6 点,结束时间是 1 月 17 日凌晨 5:59(由于我的时区),而不是从凌晨 12:00 开始一直持续到晚上 11:59。用于检索事件的代码如下。

- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d {
// Update tableData with event data from date
[tableData removeAllObjects];
NSArray *a = [systemCalendar eventsMatchingPredicate:[systemCalendar predicateForEventsWithStartDate:d endDate:[NSDate dateWithTimeInterval:84600 sinceDate:d] calendars:nil]];
[tableData addObjectsFromArray:a];
[self.eventsTable reloadData];
}

最佳答案

考虑到我的时间很紧,我想出了一个解决方案,而且似乎可行。我唯一担心的是,即使时间间隔偏移量本身为负,我也必须将偏移量乘以 -1。这没有意义,因为我们试图从 NSDate 中减去而不是添加它。一个正数减去一个负数给我们一个更大的数字,所以我有点担心 PM 另一边的 GMT 区域,想知道我是否真的应该将所有时间间隔乘以 -1。有人有什么想法吗?

- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d {
[NSTimeZone resetSystemTimeZone];
NSTimeZone *tz = [NSTimeZone systemTimeZone];
NSArray *comps = [[tz description] componentsSeparatedByString:@" "];
NSTimeInterval offset = (NSTimeInterval)[[comps lastObject] floatValue];
if (offset < 0) {
offset *= -1;
}
NSDate *startDate = [d dateByAddingTimeInterval:offset];

NSArray *a = [systemCalendar eventsMatchingPredicate:[systemCalendar predicateForEventsWithStartDate:startDate endDate:[NSDate dateWithTimeInterval:84600 sinceDate:startDate] calendars:nil]];
NSLog(@"Events for the date: %@", a);
[tableData addObjectsFromArray:a];
[self.eventsTable reloadData];
}

关于objective-c - EKEventStore 时区不是 GMT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8839795/

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