2015-11-06 99 views
0

我必须在此日期2015-11-06T18:00:00-0500如何将字符串转换为日期,又不失格式

我的格式是yyyy-MM-dd'T'HH:mm:ssZ

我尝试

let startDateString = "2015-11-06T18:00:00-0500" 
let format = NSDateFormatter() 
format.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 

let startDateBtnEnd = format.dateFromString(startDateString) 
println("startDateBtnEnd 2 \(startDateBtnEnd)") 

但日志 startDateBtnEnd 2 Optional(2015-11-07 00:00:00 +0000)

+0

这是没有意义的。 NSDate代表绝对时间点。它没有格式(也没有时区)。 –

+0

日期和字符串是不同的。如果不以某种方式将日期转换为字符串,则无法记录日期。生成描述时,NSDate不使用ISO格式。 – Wain

+0

'2015-11-06T18:00:00-0500'表示与“2015-11-07 00:00:00 + 0000”相同的时间。时区是日期如何表示为字符串的函数。不要担心'println'显示它像它一样。如果您关心结果字符串显示的时区,请使用其他日期格式化程序在所需时区中创建该字符串。 – Rob

回答

1

NSDate以UTC存储日期。您可以在任何时区将其转换为相同的时间。但失去了太多的神经元在精神上转换NSDate从一个时区到另一个后,我决定把我自己的扩展添加到NSDate打印出来在本地时区,而不是:

extension NSDate { 
    func toString(timeZone: NSTimeZone = NSTimeZone.localTimeZone()) -> String { 
     let formatter = NSDateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
     formatter.timeZone = timeZone 

     return formatter.stringFromDate(self) 
    } 
} 

// Usage: 
print("startDateBtnEnd 2 \(startDateBtnEnd.toString())") 
相关问题