Ios 如何在Swift中优化使用NSDateFormatter

Ios 如何在Swift中优化使用NSDateFormatter,ios,swift,nsdate,nsdateformatter,Ios,Swift,Nsdate,Nsdateformatter,我想以这种格式阅读日期:2016-03-15T17:30:00-04:00 并显示如下:3月15日星期二下午5:30 我目前拥有以下代码: var strDate = "2016-03-15T17:30:00-04:00" let dateFormatter = NSDateFormatter() dateFormatter.locale = NSLocale.currentLocale() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ

我想以这种格式阅读日期:2016-03-15T17:30:00-04:00

并显示如下:3月15日星期二下午5:30

我目前拥有以下代码:

var strDate = "2016-03-15T17:30:00-04:00"

let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale.currentLocale()

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let dateObj = dateFormatter.dateFromString(strDate)

dateFormatter.dateFormat = "EEEE, MMMM dd, 'at' h:mm a"
print(dateFormatter.stringFromDate(dateObj!))
上面的代码可以工作,但我设置了NSDateFormatter对象的dateFormat两次—一次将字符串转换为NSDate对象,另一次将日期对象显示为字符串

这是使用NSDateFormatter的最佳方式,还是有一种不用设置两次dateFormat的方式


另一种方法是使用两个NSDateFormatter对象,每个对象都具有不同的dateFormat。然后我可以根据我是读取日期还是显示日期来使用每一个。这是解决问题的更好办法吗

如果您担心效率,可以使用两个nsdateformatter,每次转换一个,并且只设置一次,可能作为静态变量。显然,最好是测量实际花费的时间

如果只创建一次并将它们存储在静态变量中,请确保设置了同一个类来侦听
NSCurrentLocaleDidChangeNotification
通知。收到后,应创建新的日期格式化程序。感谢gnasher729的响应,我将使用两个NSDateFormatter@rmaddy为什么我必须监听
NSCurrentLocaleDidChangeNotification
通知?以防用户更改其区域设置。缓存的日期格式化程序将基于旧的区域设置。请注意,在解析RFC 3339/ISO 8601日期时,您不希望使用
currentLocale
,而希望使用
NSLocale(localeIdentifier:“en_US\u POSIX”)
。但在为用户显示时,请将
区域设置
重置为
当前区域设置
。看见对于一个或两个格式化程序的问题,这取决于您是否将重复执行此操作(在这种情况下,您可能需要两个单独的格式化程序,您可以实例化/配置一次,然后在每个日期重复使用)。如果你只在一次约会中这样做,那么差异是无法观察到的。谢谢你的回复@Rob。我将解析和转换多个日期字符串,所以我想我将创建两个NSDateFormatter作为静态变量,并为每个设置自己的区域设置。