日期不会跟随时区

时间:2017-07-30 13:00:23

标签: swift date timezone actionsheetpicker

您好我正在尝试实施日期/时间通知,但日期是2小时。

选择日期时的代码

func SelectTime(sender: UIView){

    formatter.timeZone = TimeZone.autoupdatingCurrent
    let timePicker = ActionSheetDatePicker(title: "Time:", datePickerMode: UIDatePickerMode.time, selectedDate: userDate, doneBlock: {
        picker, userDateWithTime, index in

        self.formatter.timeZone = TimeZone.autoupdatingCurrent

        self.formatter.dateFormat = "yyyy MMMM dd, HH:mm"
        self.dateSelected.text = self.formatter.string(for: userDateWithTime)

        //print("User date picked \(self.formatter.string(from: userDateWithTime as! Date))")
        return

创建通知的代码

let uuid = UUID().uuidString
    let notification = UNMutableNotificationContent()
    notification.title = "Plus - Todo"
    //notification.subtitle
    notification.body = taskText.text!

    let calendar = Calendar.current
    let dateComponents = calendar.dateComponents(in: .current, from: userDateWithTime)

    //let dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: correctDate!)


    let notificationTrigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
    //let notificationTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
    let request = UNNotificationRequest(identifier: uuid, content: notification, trigger: notificationTrigger)

    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

1 个答案:

答案 0 :(得分:0)

问题是userPickedDateWithTime的类型为Any而不是Date。我通过创建一个类型为date的formattedDate并将formattedDate = userPickedDateWithTime设置为!来解决这个问题!日期然后在创建通知时使用formattedDate而不是userPickedDateWithTime

var formattedDate = Date()
func SelectTime(sender: UIView){

formatter.timeZone = TimeZone.autoupdatingCurrent
let timePicker = ActionSheetDatePicker(title: "Time:", datePickerMode: UIDatePickerMode.time, selectedDate: userDate, doneBlock: {
    picker, userDateWithTime, index in

    self.formatter.timeZone = TimeZone.autoupdatingCurrent

    self.formatter.dateFormat = "yyyy MMMM dd, HH:mm"
    self.dateSelected.text = self.formatter.string(for: userDateWithTime)

    //print("User date picked \(self.formatter.string(from: userDateWithTime as! Date))")
    formattedDate = userPickedDateWithtime as! Date // <-- This solved the problem

    return

通知代码

let uuid = UUID().uuidString
let notification = UNMutableNotificationContent()
notification.title = "Plus - Todo"
//notification.subtitle
notification.body = taskText.text!

let calendar = Calendar.current
let dateComponents = calendar.dateComponents(in: .current, from: formattedDate)

//let dateComponents = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: correctDate!)


let notificationTrigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)
//let notificationTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: uuid, content: notification, trigger: notificationTrigger)

UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)