我在swift中面临这个特殊问题,从组件创建的NSDate始终打印最后一个日期而不是当前日期。
// so i wanted to get the only date without the time parts
let today = NSDate()
println(today) // "2015-04-01 14:29:05 +0000"
let calendar = NSCalendar.currentCalendar()
let comp = calendar.components(.CalendarUnitDay | .CalendarUnitMonth | .CalendarUnitYear , fromDate: today)
let justToday = calendar.dateFromComponents(comp)
println(justToday!) // "2015-03-31 18:30:00 +0000" (last day)
即使将其分配给字符串变量
let strDay = "\(justToday)" // "2015-03-31 18:30:00 +0000" (last day)
从更快的操场上查看下图,以便更清晰。
但如果我单独打印组件,它会得到正确的值
let monthFormmater = NSDateFormatter()
monthFormmater.dateFormat = "MM"
let thisMonthNo = monthFormmater.stringFromDate(justToday!).toInt()! // 4 not 3 as expected
这完全是奇怪的。有人知道会发生什么事吗?
还有一件奇怪的事。如果我使用格式化程序将字符串转换为日期,则会发生这种情况。
let monthFormmater = NSDateFormatter()
monthFormmater.dateFormat = "YYYY-MM-dd"
let day = monthFormmater.dateFromString("2015-04-02") // "Apr 2, 2015, 12:00 AM"
println(day) // 2015-04-01 18:30:00 +0000 (last day)