当我要将事件从应用程序设置到设备日历时。我弄错时间了。
- 我有三个日期选择器,一个用于日期,另外两个用于事件的开始时间和结束时间。我在 EKEvent 中将开始日期设置为结束日期,因为我必须只在那天设置事件。
从日期选择器中获取日期并将其作为开始日期和结束日期存储为 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 日在日历应用程序中。日期设置完美但为什么时间设置不完美?下图为日历应用程序。
我对时间间隔的转换和设置日期有疑问。但我不知道的是什么。 请给我建议解决方案和想法。
谢谢
最佳答案
您需要将时间转换为所需的时区。因为现在日期已在您的时区中正确设置,但显示为 +0000 Screenshot .使用日历表示日期 this
然后在这两种方法中像这样更改您的代码:
startDate.addingTimeInterval(difference!)
到
self.startDate = startDate.addingTimeInterval(difference!)
和
endDate.addingTimeInterval(difference!)
到
self.endDate = endDate.addingTimeInterval(difference!)
在您的情况下,Xcode 警告“调用‘addingTimeInterval’的结果未使用”
尝试转换日期,在将其设置为“existevent”之前,或者在显示它时
func convertDate(date:Date) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm" // or other format
var comp = DateComponents()
let calendar = Calendar.current
comp.hour = Calendar.current.component(.hour, from: date)
comp.minute = Calendar.current.component(.minute, from: date)
comp.timeZone = TimeZone(abbreviation: "GMT")!
return calendar.date(from: comp)!
}
关于ios - 在 ios 中分别在一个 nsdate 中设置日期和时间时出现错误时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44754846/