NSDate 来自 Swift 中的字符串
Posted
技术标签:
【中文标题】NSDate 来自 Swift 中的字符串【英文标题】:NSDate from String in Swift 【发布时间】:2014-11-07 22:45:47 【问题描述】:我有一个字符串(例如“2014-11-06 16:32:01”) 我想将此格式转换为 NSDate 对象。 这就是我正在做的事情:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
var date = dateFormatter.dateFromString("2014-11-06 16:32:01")!
var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: date)
var year = myComponents.year
var month = myComponents.month
var day = myComponents.day
年、月和日的值分别为 9223372036854775807。我的 dateFormat 是否有误?
【问题讨论】:
刚刚复制粘贴了你的例子,得到了这个:2014-11-06 14:32:01 +0000 【参考方案1】:日期格式正确。但是您必须在
myCalendar.components(...)
打电话。所有其他组件都设置为NSNotFound
aka NSIntegerMax
,
在 64 位架构上是 2^63 - 1 = 9223372036854775807
。
这应该可行:
var myComponents = myCalendar.components(.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit, fromDate: date)
【讨论】:
这给了我单位:year = 4;月 = -140590335715296;天 = -36028797018959872; @DaveAlton:这很奇怪,我在发布之前测试过代码。println(date)
显示什么?你是如何打印年/月/日的?
由于某种原因 println(date) 不起作用。我通过设置断点来获取值
马丁 我刚刚测试过。它显示正确的日期 let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" var date = dateFormatter.dateFromString("2014-11-06 16:32:01")! var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)! var myComponents = myCalendar.components(NSCalendarUnit.WeekdayOrdinalCalendarUnit, fromDate: date) println(date) var year = myComponents.year var month = myComponents.month var day = myComponents.day
@DaveAlton:那么您可能是“语言环境功能”的“受害者”(请参阅***.com/questions/6613110/…)。尝试在字符串到日期转换之前添加dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
。【参考方案2】:
static func convertStringToNSDate(dateStr: String) -> NSDate
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd HH':'mm':'ss '+0000'"
let date = dateFormatter.dateFromString(dateStr)
return date!
在我的代码中,我使用该方法将字符串转换为 NSDate。您唯一需要做的就是将 dateFormat 属性更改为与您要转换的日期格式相同。
【讨论】:
以上是关于NSDate 来自 Swift 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定的初始化程序必须具有可选类型,而不是 swift 3 中的“字符串”
Swift 2 - 如果值在当前日期之前,则删除数组中的 NSDate 值
使用 Swift 将类中的结构保存到 NSUserDefaults
如何使用 nsdateformatter 将 nsdate 转换为另一种格式