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 的未来版本中出现问题,请发表评论,我会更新。
我正在尝试转换 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 的未来版本中出现问题,请发表评论,我会更新。