使用Swift格式化日期

时间:2015-07-29 03:52:52

标签: swift nsdateformatter

我正在尝试使用Date Formatter将字符串转换为日期。

var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd’T’HH:mm:ss’Z’"
var AvailabletoDateTime = dateFormatter.dateFromString("2015-07-16’T’08:00:00’Z’")

但是AvailabletoDateTime正在返回零。 有人可以帮助我,如果我想念Anything Here,请告诉我。

2 个答案:

答案 0 :(得分:5)

这看起来像您尝试使用ISO 8601 / RFC 3339日期。通常日期字符串包含任何引号。它将是:read -n 1 -p "Select 1-3 ή \"q\" to quit: " i 之类的东西。仅供参考,2015-07-16T08:00:00Z代表GMT / UTC时区(与您当地时区相对)。

所以,在Swift 3中:

Z

注意,我(a)在我的格式字符串中使用let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" dateFormatter.locale = Locale(localeIdentifier: "en_US_POSIX") dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) let availabletoDateTime = dateFormatter.date(from: "2015-07-16T08:00:00Z") 而不是ZZZZZ; (b)明确设定Z。我为格式化程序执行此操作不仅可以成功地将字符串timeZone解析为2015-07-16T08:00:00Z对象,而且还可以用于向另一个方向转换,将Date对象转换为字符串格式为Date

另请注意,我使用2015-07-16T08:00:00Z字符,而不是'字符。我也不需要设置,因为calendar的{​​{1}}就是您所需要的。

有关详细信息,请参阅Technical Q&A 1480

不是,现在您使用新的locale

en_US_POSIX

在Swift 3中,如果可以,请使用此ISO8601DateFormatter,但要认识到它并未提供尽可能多的控制(例如,在iOS 11之前,您无法指定毫秒数)。但在这种情况下,它已经足够了。

对于Swift 2的演绎,请参阅previous revision of this answer

答案 1 :(得分:2)

试试这样:

let dateFormatter = NSDateFormatter()
dateFormatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let availabletoDateTime = dateFormatter.dateFromString("2015-07-16T08:00:00Z")