【问题标题】:EKEventStore time zone isn't GMTEKEventStore 时区不是 GMT
【发布时间】:2012-01-12 17:51:53
【问题描述】:

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

例如,我在格林威治标准时间 -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];
}

【问题讨论】:

    标签: objective-c ios calendar nsdate eventkit


    【解决方案1】:

    鉴于我的时间很短,我想出了一个解决方案,而且它似乎有效。我唯一担心的是,即使时间间隔偏移量本身是负数,我也必须将偏移量乘以 -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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 2018-12-25
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多