【问题标题】:NSDate from String in SwiftNSDate 来自 Swift 中的字符串
【发布时间】:2023-03-18 15:22:01
【问题描述】:

我有一个字符串(例如“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

标签: swift nsdate nsdateformatter nscalendar


【解决方案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:那么您可能是“语言环境功能”的“受害者”(请参阅​​stackoverflow.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 属性更改为与您要转换的日期格式相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多