【问题标题】:how to add calendar event on specific time and date?如何在特定时间和日期添加日历事件?
【发布时间】:2017-05-19 07:58:01
【问题描述】:
  • 我从日期选择器获取日期和时间,并将其设置为字符串格式。
  • 我想在给定的日期和时间添加事件。
  • 我想设置两个警报,1 在给定的特定时间(例如“5 分钟、15 分钟、30 分钟”)之前开启警报。 2 秒提醒活动时间。
  • 在下面的代码中,我需要做什么才能完成我的要求。

提出任何建议或想法来解决它 谢谢

从日期选择器获取日期和时间

let dateFormatter = DateFormatter()

    dateFormatter.dateFormat = "YYYY-MM-dd"
    routineDate = dateFormatter.string(from: self.datetimepicker.date)
    print(routineDate)

  let dateFormatter = DateFormatter()

    dateFormatter.dateFormat = "HH:mm a"
    routineTime = dateFormatter.string(from: self.datetimepicker.date)
    print(routineTime)

在此处创建并保存 EKEvent:

 let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .short
    dateFormatter.dateFormat = "YYYY-MM-dd"
    let startDATE = dateFormatter.date(from: routineDate)
    let endDATE = dateFormatter.date(from: routineDate)

    print(routineDate)
    if temptypeID == "1" {
        let event:EKEvent = EKEvent(eventStore: appleEventStore)
        event.title = tempDescription

    //  what should i need to change here for specific date and time?

        event.startDate = (startDATE?.addingTimeInterval(60*60))!
        event.endDate = (endDATE?.addingTimeInterval(60*60))!
        event.isAllDay = false
        event.notes = "This is a note"
        event.calendar = cal

        do {
            try appleEventStore.save(event, span: .thisEvent)
            print("events added with dates:")

         // what should changes i need to do here for alert ?

            let alarm = EKAlarm(absoluteDate: Date(timeInterval: -3600, since: event.startDate))

        event.addAlarm(alarm)

        } catch let e as NSError {
            print(e.description)
            return
        }
        print("Saved Event")
    }

【问题讨论】:

  • 您正在从 datePicker 获取日期。为什么要格式化为字符串以保存它,然后将其格式化回日期以使用它?我会将其保存为日期并将其格式化为字符串,仅用于显示目的(例如在 UILabel 上显示)
  • 我知道,但我应该为我的解决方案做些什么? @pesch

标签: ios swift date time ekevent


【解决方案1】:

尝试将您的日期保存为日期:

let startDate = self.datetimepicker.date
let endDate = startDate.addingTimeInterval(3600 as TimeInterval)

然后使用这些来创建您的活动:

let event:EKEvent = EKEvent(eventStore: appleEventStore)
event.title = tempDescription

//  what should i need to change here for specific date and time?

event.startDate = startDate
event.endDate = endDate
event.isAllDay = false
event.notes = "This is a note"
event.calendar = cal

do {
    try appleEventStore.save(event, span: .thisEvent)
    print("events added with dates:")

    // Adding an Alert 1 hour before the startDate
    let reminder = EKAlarm(relativeOffset: -3600)
    event.addAlarm(reminder)
    print("Saved Event")
} catch let e as NSError {
    print(e.description)
    return
}

此外,您的事件的创建不应该在您的 DateFormatter 声明中。

【讨论】:

  • 根据您的回答,它只设置了进入事件的时间。活动的具体日期和时间是什么?我有两个日期选择器,一个用于日期,一个用于时间。两者都是分开的(见我的代码)。我想添加一次事件,例如:(2017 年 5 月 19 日,时间是下午 5:15)。那么我该怎么做呢?请帮帮我
  • 您的回复可以帮助我并节省我的时间。你能帮我在事件中添加警报吗?我想在我的问题中提到上面提到的两个警报
  • 我添加了这个:let reminder = EKAlarm(relativeOffset: -3600) event.addAlarm(reminder) 让我知道它是否适合你
  • 它不工作。即使我没有为事件设置任何警报并保存事件,然后我签入 iPhone 日历应用程序,它也会在 5 分钟内向我显示一个警报,然后我没有设置。那么为什么默认情况下它会在 5 分钟前发出警报。我想根据我的要求设置警报。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
相关资源
最近更新 更多