【问题标题】:EKEventStore saveEvent adding events a hour laterEKEventStore saveEvent 一小时后添加事件
【发布时间】:2017-09-15 18:33:13
【问题描述】:

我相信这在以前有效,但现在当我在时区设置为自动或路易斯维尔(美国东部时间)时将事件添加到我的日历时,我添加了一个美国东部时间的事件,它会提前一小时将它添加到我的日历中.

我在另一个在 CST 中有事件的应用程序上执行此操作,当我将它们添加到我的日历时,它会很好地添加它们。是我的代码错了吗?

- (void)viewWillAppear:(BOOL)animated {
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:self.event.timeZone]];
    [dateFormat setDateFormat:@"yyyy-MM-ddHH:mm:ss"];

    self.startDate = [dateFormat dateFromString:self.game.dateTime];
    self.endDate = [[NSDate alloc] initWithTimeInterval:60*self.event.gameDuration sinceDate:self.startDate];
}


    - (void) addToCalendar
    {
        EKEventStore *eventStore = [[EKEventStore alloc] init];

        if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]){
            [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
             {
                 for (EKSource *source in eventStore.sources)
                 {
                     if (source.sourceType == EKSourceTypeCalDAV || source.sourceType == EKSourceTypeLocal)
                     {

                         EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
                         event.title     = [NSString stringWithFormat:@"%@ vs. %@", self.game.awayTeam.team.name, self.game.homeTeam.team.name];
                         event.location = [NSString stringWithFormat:@"%@ - %@", self.game.venue.name, self.game.venue.court];

                         event.startDate = self.startDate;
                         event.endDate = self.endDate;

                         [event setCalendar:[eventStore defaultCalendarForNewEvents]];
                         NSError *err;

                         [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

                         if(err) {
                             dispatch_async(dispatch_get_main_queue(), ^{
                                 [self showAlert:@"Error" desc:@"There was a problem adding this game to your calendar"];
                             });
                         }
                         else {
                             dispatch_async(dispatch_get_main_queue(), ^{
                                 [self showAlert:@"Success" desc:@"Game added to your calendar"];
                             });
                         }
                         break;
                     }
                 }
             }];

        }
    }

【问题讨论】:

    标签: ios iphone timezone nstimezone ekeventstore


    【解决方案1】:

    我发现 Apple 使用他们自己的时区字符串,所以我只是在通过我们的 API 发送时将 Windows 时区转换为 Apple。

    【讨论】:

    • 我认为这是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多