I want to ask about NSDate
, how to set/format current time like "2015-08-12 09:30:41 +0000" to "2015-08-12 00:00:00 +0000
I'm already using :
var dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .NoStyle
//result date will be : Aug 12, 2015
but the value date is not stored in the Database exactly as "2015-08-12 00:00:00 +0000" but storing as "2015-08-11 17:00:00 +0000 UTC"
let dateString = "2015-08-12 09:30:41 +0000"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
if let dateFromString = dateFormatter.dateFromString(dateString.componentsSeparatedByString(" ").first ?? "") {
println(dateFromString) // "2015-08-12 00:00:00 +0000"
}
The easiest way to remove the time portion from an NSDate instance is
let startOfDate = NSCalendar.currentCalendar().startOfDayForDate(NSDate())
To get the date depending on the current time zone use
let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
calendar.timeZone = NSTimeZone(forSecondsFromGMT: 0)
let startOfDate = calendar.startOfDayForDate(NSDate())
println(startOfDate)
If you only care about the timezone on user's device, i.e, you are not going to save that formatted date string to server, etc, then, you can use the following code:
var formatter: NSDateFormatter = NSDateFormatter()
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)
If you want to save that date string to server as well, then, you should add timezone info to the formatter:
var formatter: NSDateFormatter = NSDateFormatter()
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
formatter.dateFormat="yyyy-MM-dd 00:00:00 Z"
formatter.stringFromDate(date)
Update
Now I understand what you actually wanted to do, you have a date string instead of a NSDate object as an input.
You can use the following code for achieving your desired output, with respect to preserving timezone info of the input.
let dateString = "2015-08-12 09:30:41 +0000"
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let timeZone = NSTimeZone(forSecondsFromGMT: 0)
let inputDateFormatter = NSDateFormatter()
inputDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss Z"
inputDateFormatter.calendar = calendar
if let inputDate = inputDateFormatter.dateFromString(dateString) {
let outPutDateFormatter = NSDateFormatter()
outPutDateFormatter.calendar = calendar
outPutDateFormatter.timeZone = timeZone
outPutDateFormatter.dateFormat = "yyyy-MM-dd 00:00:00 Z"
print(outPutDateFormatter.stringFromDate(inputDate))
}