Swift 中的 NSDateFormatter 到 Int

NSDateFormatter to Int in Swift

我正在尝试转换 NSDateFormater Int,但变量 return 为零。 这是我正在使用的代码:

    var datePeriodBegin:NSDate = NSDate()    
    if(NSUserDefaults.standardUserDefaults().objectForKey("datePeriodBegin") != nil){
        datePeriodBegin = (NSUserDefaults.standardUserDefaults().objectForKey("datePeriodBegin")! as? NSDate)!
    }

    let datePeriodEnd = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitMonth, value: 6, toDate: datePeriodBegin, options: nil)!


    var dateFormatter: NSDateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyyMMdd000000"

    var start:Int = dateFormatter.stringFromDate(datePeriodBegin).toInt()!
    var end:Int = dateFormatter.stringFromDate(datePeriodEnd).toInt()!

    println(start) // return nil in iPhone 4S -> iPhone 5s

您的日期不适合 Int32。 iPhone4s是32位,iPhone5s应该是64位。

Yene 是绝对正确的,如果你真的需要最后的所有这些零,那么在 32 位设备上你需要先转换为 Int64:

  var datePeriodBegin:NSDate = NSDate()
        if(NSUserDefaults.standardUserDefaults().objectForKey("datePeriodBegin") != nil){
            datePeriodBegin = (NSUserDefaults.standardUserDefaults().objectForKey("datePeriodBegin")! as? NSDate)!
        }

        let datePeriodEnd = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitMonth, value: 6, toDate: datePeriodBegin, options: nil)!


        var dateFormatter: NSDateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyyMMdd"

        var start = dateFormatter.stringFromDate(datePeriodBegin).toInt()
        var end = dateFormatter.stringFromDate(datePeriodEnd).toInt()

        if let s = start {
            println(Int64(s)*1000000) // return 20150427000000 iPhone 4S -> iPhone 5
        }

在32位设备上,Int的最大值与Int32相同,为2147483647,而Int64的最大值为9223372036854775807(与64位设备上的Int相同) .

更新:iOS9,Xcode7

该代码不再适用于 Xcode 和 Swift 的当前版本 - 这是为 iOS 9、Xcode 7:[=12 重写的工作代码=]

var datePeriodBegin:NSDate = NSDate()
if(NSUserDefaults.standardUserDefaults().objectForKey("datePeriodBegin") != nil){
    datePeriodBegin = (NSUserDefaults.standardUserDefaults().objectForKey("datePeriodBegin")! as? NSDate)!
}

let datePeriodEnd = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.Month, value: 6, toDate: datePeriodBegin, options: [])!


var dateFormatter: NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyyMMdd"

var start = Int(dateFormatter.stringFromDate(datePeriodBegin))
var end = Int(dateFormatter.stringFromDate(datePeriodEnd))

if let s = start {
    print(Int64(s)*1000000) // return 20150427000000 iPhone 4S -> iPhone 5
}

如果它在 Xcode/Swift/iOS 的未来版本中出现问题,请发表评论,我会更新。