我遇到了在Xcode中将字符串转换为NSDate的问题:我正在尝试获取当前日期,减去一天并将小时设置为中午。我就是这样做的(两个片段有不同的功能):
let date = NSDate();
let dateFormatter = NSDateFormatter()
//var locale = NSLocale(localeIdentifier: "en_US_POSIX")
//dateFormatter.locale = locale
dateFormatter.dateFormat = "dd/mm/yyyy HH:mm"
dateFormatter.timeZone = NSTimeZone.localTimeZone()
var string = dateFormatter.stringFromDate(date)
var localdate = dateFormatter.dateFromString(string)
var localString = dateFormatter.stringFromDate(localdate!)
var calendar = NSCalendar.currentCalendar()
var components = calendar.components(NSCalendarUnit.HourCalendarUnit | NSCalendarUnit.DayCalendarUnit | NSCalendarUnit.MonthCalendarUnit | NSCalendarUnit.YearCalendarUnit, fromDate: localdate!)
self.dateCriteriaHour = components.hour
self.dateCriteriaDay = components.day
self.dateCriteriaMonth = components.month
self.dateCriteriaYear = components.year
这似乎有效:我得到了当前日期的组件。然后我这样做:
var day = String(self.dateCriteriaDay - 1)
var month = String(currentMonth)
var year = String(self.dateCriteriaYear)
var hour = "12:00"
var date = year + "/" + month + "/" + day + " " + hour
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy/m/dd HH:mm"
var criteriaDate = dateFormatter.dateFromString(date)
println(date)
println(NSDate())
println(criteriaDate)
这就是事情变得奇怪的地方。以下是控制台的输出:
2015/7/11 12:00
2015-07-12 15:21:42 +0000
Optional(2015-01-11 04:00:00 +0000)
我知道设备会在所选时区内存储时间,所以我并不太担心。让我感到困惑的是,除了月份之外,一切都是正确的,即使它出现在字符串中。
知道为什么会这样吗?
答案 0 :(得分:2)
您的日期格式错误。
dd/mm/yyyy HH:mm
^^ ^^
您使用mm
两次。小写m
表示分钟,大写M
表示月份。所以你的dateFormat应该是dd/MM/yyyy HH:mm