gorgomit
gorgomit

Reputation: 25

Can't get locale time on Date type

let date = datePicker.date
let newDate = dateFormatter.date(from: dateFormatter.string(from: date))
let currentDate = dateFormatter.date(from: dateFormatter.string(from: Date()))
let minDate = currentDate
datePicker.minimumDate = minDate

realm.beginWrite()
let newItem = ToDoListItem()
newItem.date = dateFormatter.date(from: dateFormatter.string(from: Date()))!
newItem.item = text
realm.add(newItem)
try! realm.commitWrite()
textView.text = dateFormatter.string(from: newDate!) + "\n\(newItem.date)"
print("NewDate: \(dateFormatter.string(from: currentDate!))")

I need current time but code is giving me Greenwich time. So I did this. In print I can get true result but in newItem.date is giving me wrong result. How can i fix this.

EDIT:

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .short
dateFormatter.locale = Locale.current
let date = datePicker.date

let newDate = dateFormatter.date(from: dateFormatter.string(from: date))
let currentDate = dateFormatter.date(from: dateFormatter.string(from: Date()))

let minDate = currentDate
datePicker.minimumDate = minDate
realm.beginWrite()
let newItem = ToDoListItem()
newItem.date = dateFormatter.date(from: dateFormatter.string(from: Date()))!
newItem.item = text
realm.add(newItem)
try! realm.commitWrite()
textView.text = dateFormatter.string(from: newDate!) + "\n\(newItem.date)"
print("NewDate: \(dateFormatter.string(from: currentDate!))")

Still not working.

Upvotes: 1

Views: 54

Answers (1)

Rob
Rob

Reputation: 437472

When writing dates in Realm, no date formatter is needed:

realm.beginWrite()
let newItem = ToDoListItem()
newItem.date = Date()  // not dateFormatter.date(from: dateFormatter.string(from: Date()))!
newItem.item = text
realm.add(newItem)
try! realm.commitWrite()

Converting the Date to a String and back to a Date (with dateFormatter.date(from: dateFormatter.string(from: Date()))!) is inefficient and unnecessary.

When preparing the string for the text view, then use the formatter:

// use this

textView.text = dateFormatter.string(from: newItem.date)

// do not use string interpolation of `Date` objects, such as this
//
// textView.text = ... + "\n\(newItem.date)"

Where

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .short

// date formatter’s default to the current time zone, so this is not necessary
//
// dateFormatter.locale = Locale.current

Upvotes: 2

Related Questions