hardik
hardik

Reputation: 199

getting wrong time while set date and time in one nsdate separately in ios

when i'm going set event from app to device calendar. i got wrong time.

get date from date-picker and store it as startdate and end date as nsdate type. below is my date-picker method

 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
}

below method is for start time where i get time and convert to Time Interval and set it to start date.

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)

}

below method is for end time where i get time from picker and convert to Time Interval and set Time Interval to 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!)

}

below image showing which date i set in picker date and time picker

below is My EKEvent method where i create event.

 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

when i check event in calendar i got Problem, i get wrong time in event.i set start time 12:50 pm end time 1:50 pm on date 27 june 2017 in caledar app. date is set perfectly but why time is not set perfectly ? below image for calendar app.

where i getting wrong time in event

i have doubt in conversion of time interval and set to date. but what i missing dont know. please suggest me solution and ideas to solve.

Thank you

Upvotes: 1

Views: 1931

Answers (1)

Andrey Iskamov
Andrey Iskamov

Reputation: 117

you need to convert the time to the desired time zone. Because now the date is set correctly in your timezone, but is displayed in +0000 Screenshot. Use calendar for date representation this

And change your code like this in both methods:

startDate.addingTimeInterval(difference!)

to

self.startDate = startDate.addingTimeInterval(difference!)

and

endDate.addingTimeInterval(difference!)

to

self.endDate = endDate.addingTimeInterval(difference!)

in your case Xcode Warning "Result of call to 'addingTimeInterval' is unused"

Try to convert date, before set it to you "existevent", or when you show it

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)!
}

Upvotes: 1

Related Questions