我正在尝试使用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,请告诉我。
答案 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")