Swift - NSDate - 删除部分日期

Swift - NSDate - remove part of date

我的日期格式如下 2015-02-22T20:58:16+0000

为了将其转换为 NSDate,我找到了以下解决方案

var df = NSDateFormatter()
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
var date = df.dateFromString(myDate)
df.dateFormat = "eee MMM dd yyyy"
var dateStr = df.stringFromDate(date!)

但我想从日期中删除 +0000。我尝试删除 ZZZZm,但应用程序崩溃了。

如何删除多余的 +0000 位数字?

我不建议您在解析结果时删除时区。但是如果你只想删除字符串,你可以这样做:

let date = "2015-02-22T20:58:16+0000"
let display = date.substringToIndex(date.characters.indexOf("+")!)

这将为您提供 2015-02-22T20:58:16

的结果

你问:

How can I remove extra +0000 digits?

我不确定你的意思,因为结果 dateStr 确实 删除了 +0000

但是让我们退后一步,考虑一下解析 2015-02-22T20:58:16+0000 格式的日期字符串的正确方法。您应该使用 en_US_POSIXlocale,如 Apple Technical Q&A 1480:

中所述
let myDate = "2015-02-22T20:58:16+0000"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
let date = dateFormatter.dateFromString(myDate)

当您想要为最终用户格式化时,将 locale 重置回 currentLocale:

dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.dateFormat = "eee MMM dd yyyy"
let dateStr = dateFormatter.stringFromDate(date!)

然后dateStr变成:

Sun Feb 22 2015

或者,也许更好,为了更好的本地化行为,使用 dateFormatFromTemplate:

let locale = NSLocale.currentLocale()
dateFormatter.locale = locale
dateFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("eeeMMMdyyyy", options: 0, locale: locale)
let dateStr = dateFormatter.stringFromDate(date!)

在美国,它将如上所示,但在英国将显示为:

Sun, 22 Feb 2015

或使用标准 dateStyle 值之一(如果适合您的话)。但我通常建议不要使用硬编码 dateFormat,而是使用尊重最终用户本地化设置的格式。