4

如果今天是 5 月 6 日星期二下午 2 点

event.startDate = [[NSDate alloc] init];
event.allDay = YES;
[dateFormat setDateFormat:EEEE, MMMM dd, yyyy];
NSString* dayStr = [dateFormat stringFromDate:event.startDate];
timeDetails.text = [NSString stringWithFormat:@"%@\nAll day", dayStr];

5月5日星期一的结果

没有 allDay 设置的相同代码

event.startDate = [[NSDate alloc] init];
[dateFormat setDateFormat:EEEE, MMMM dd, yyyy];
NSString* dayStr = [dateFormat stringFromDate:event.startDate];
timeDetails.text = [NSString stringWithFormat:@"%@\nAll day", dayStr];

结果是 5 月 6 日星期二,这是正确的。有人有任何线索吗?

4

2 回答 2

10

背景

在 iOS 中,所有日期都有一个时间组件。因此,对于一整天的活动,仍会使用一些时间。通常这是午夜到“刚好在”午夜(23:59)之前,这使事件的跨度接近 24 小时。

挑战来自时区和夏令时。这可能意味着全天活动从前一天晚上 11 点开始,到 22:59 结束。这完全取决于您从哪里查看活动。不幸的是,在 iOS 开发中,这通常并不清楚!我有一些非常“有趣”的错误,只有在晚上 11 点到午夜之前运行应用程序时才会出现。

使固定

令人惊讶的是,EKEvent 的行为会根据您设置属性的顺序发生变化。如果您在设置 startDate之前设置 event.allDay = YES,那么您将获得您所期望的行为。

于 2015-06-07T19:18:20.997 回答
1

它可能与时区有关。但无法确认,因为即使我尝试设置格式化程序时区,它仍然会产生同样的问题。更重要的是,我会假设如果我创建 NSData 并默认使用 NSFormatter 它会全部匹配。

于 2014-05-12T03:14:06.973 回答