【发布时间】:2017-06-26 07:30:36
【问题描述】:
当我将事件从应用程序设置到设备日历时。我走错时间了。
- 我有三个日期选择器,一个用于日期,另外两个用于事件的开始时间和结束时间。我在 EKEvent 中将开始日期设置为结束日期,因为我只需要在那天设置事件。
从日期选择器中获取日期并将其存储为 startdate 并将结束日期存储为 nsdate 类型。下面是我的日期选择器方法
func pickerDate()
{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd"
routineStartDate = dateFormatter.string(from: self.startDatePicker.date)
// it is for database entry in string and i get right string
print(routineStartDate)
startDate = self.startDatePicker.date as NSDate
print(startDate)
endDate = startDate
}
以下方法用于开始时间,我获取时间并转换为时间间隔并将其设置为开始日期。
func starttime() {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
let then: Date? = self.startTimePicker.date
let difference: TimeInterval? = then?.timeIntervalSinceNow
startDate.addingTimeInterval(difference!)
routineStartTime = dateFormatter.string(from: self.startTimePicker.date)
// it is for database entry in string and i get right string
print(routineStartTime)
}
下面的方法是结束时间,我从选择器获取时间并转换为时间间隔并将时间间隔设置为结束日期
func endtime() {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm"
routineEndTime = dateFormatter.string(from: self.endTimePicker.date)
print(routineEndTime)
// it is for database entry in string and i get right string
let then: Date? = self.endTimePicker.date
let difference: TimeInterval? = then?.timeIntervalSinceNow
endDate.addingTimeInterval(difference!)
}
下面是我创建事件的我的 EKEvent 方法。
existevent.title = tempDescription
existevent.startDate = startDate as Date
existevent.endDate = endDate as Date
existevent.isAllDay = false
existevent.notes = "This is a note"
existevent.calendar = cal
当我在日历中检查事件时遇到问题,我在事件中得到错误的时间。我将开始时间 12:50 pm 结束时间 1:50 pm 设置为日期2017 年 6 月 27 日在日历应用中。日期设置完美,但为什么时间设置不完美?下图为日历应用程序。
我怀疑时间间隔的转换并设置为日期。但我想念的不知道。 请建议我解决方案和想法。
谢谢
【问题讨论】:
-
看起来是时区问题。基本上总是使用
Calendar类来做日期数学,这也可以考虑时区。 -
这个答案将帮助你理解stackoverflow.com/a/30084248/2370587
-
@Maximelc 我看到了你上面的链接,但我不明白我需要做什么样的改变?你会建议我改变吗?
标签: ios swift uidatepicker nstimeinterval ekevent