ios - 在 ios 中分别在一个 nsdate 中设置日期和时间时出现错误时间

标签 ios swift uidatepicker nstimeinterval ekevent

当我要将事件从应用程序设置到设备日历时。我弄错时间了。

  • 我有三个日期选择器,一个用于日期,另外两个用于事件的开始时间和结束时间。我在 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!)

}

下图显示了我在选择器中设置的日期 date and time picker

下面是我创建事件的 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 日在日历应用程序中。日期设置完美但为什么时间设置不完美?下图为日历应用程序。

where i getting wrong time in event

我对时间间隔的转换和设置日期有疑问。但我不知道的是什么。 请给我建议解决方案和想法。

谢谢

最佳答案

您需要将时间转换为所需的时区。因为现在日期已在您的时区中正确设置,但显示为 +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/

相关文章:

ios - UIDatePicker NSInternalInconsistencyException : unexpected number of calendar units error

ios - 如何提取具体数据?

ios - ARKit - 扩展 "hitTest"的范围

ios - 无法删除手势

ios - UITextView 超链接到内部 WebView

iphone - XCode:当用户点击 UITextbox 时显示 UIDatePicker

ios - 试图关闭 Storyboard呈现的弹出窗口

ios - Objective-c 中数组中的 Swift 闭包变为 nil

ios - 如何在 Swift 中使用 TabBarController 在两个 ViewController 之间传递数据

ios - 我以编程方式创建了 UIDatePicker 并让所选日期的 UILabel 显示,但未能让它正确显示