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 转换为另一种格式

来自html字符串的iOS Swift 4图像未在WKWebView中加载

通过 NSDate 对象属性进行 Swift 过滤