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

时间:2017-06-26 07:30:36

标签: ios swift uidatepicker nstimeinterval ekevent

当我要将事件从app设置为设备日历时。我错了。

  • 我有三个日期选择器用于日期,另外两个用于事件的开始时间和结束时间。我在EKEvent中将开始日期设置为结束日期,因为我必须仅在那一天设置事件。

从日期选择器获取日期并将其作为nsdate类型存储为startdate和end date。下面是我的日期选择方法

 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)

}

下面的方法是结束时间,我从选择器获取时间并转换为时间间隔并将时间间隔设置为enddate

 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

下面是我创建事件的My 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 结束时间下午1:50 2017年6月27日在caledar应用程序中。日期设置完美,但为什么时间不完美?日历应用程序的下方图像。

where i getting wrong time in event

我怀疑转换时间间隔和设置日期。但我错过了什么不知道。 请建议我解决方案和想法。

谢谢

1 个答案:

答案 0 :(得分:1)

您需要将时间转换为所需的时区。因为现在日期在您的时区中正确设置,但显示在+0000 Screenshot中。使用日历表示日期this

在这两种方法中改变你的代码:

.my-website {
  @import("header.scss");
  @import("main.scss");
  @import("footer.scss");
}

.my-website

startDate.addingTimeInterval(difference!)

self.startDate = startDate.addingTimeInterval(difference!)

在您的情况下Xcode警告“调用'addingTimeInterval'的结果未使用”

尝试转换日期,然后将其设置为“existevent”,或者在显示时

endDate.addingTimeInterval(difference!)