我在我的应用程序中有一个功能可以向日历添加一个事件,该过程包括解析日期的字符串表示(使用夏令时调整,并将EKEvent startDate设置为它,这是一个片段:
let eventStore : EKEventStore = EKEventStore()
eventStore.requestAccess(to: .event) { (granted, error) in
if (granted) && (error == nil) {
let event:EKEvent = EKEvent(eventStore: eventStore)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm"
// Just for demonstration
let myStartingDate = "16-04-2018 14:00:00"
if let eventDate = dateFormatter.date(from: myStartingDate) {
event.title = "Test event"
event.startDate = eventDate
event.endDate = eventDate.addingTimeInterval(TimeInterval(120 + 20 * 60))
event.notes = "This is a note"
event.location = "some location"
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
// Success, now open the calendar.
self.openCalendarOn(date: eventDate)
} catch let error as NSError {
print("failed to save event with error : \(error)")
}
}
}
}
一切都按预期工作了一段时间,但自从英国夏令时过渡以来,我注意到日历上的活动提前一小时
例如,我设置的事件是" 16-04-2018 14:00:00",但日历日期为" 16-04-2018 15 : 00:00"
有没有办法告诉EKEvent禁用夏令时调整?由于我的字符串日期已经存在。
答案 0 :(得分:0)
我发现了问题,显然我正在构建时区为gmt + 00:00的DateFormatter对象, 删除时区后,ios日历上的时间保持不变。