通过 XCode 中的 dateFromString,String Date 和 NSDate 不匹配

Mismatch between String Date and NSDate through dateFromString in XCode

我在 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)

我知道设备会在其选择的时区存储时间,所以我不太担心。令我困惑的是基本上除了月份之外一切都是正确的,即使它出现在字符串中。

知道为什么会这样吗?

您的日期格式有误。

dd/mm/yyyy HH:mm
   ^^         ^^

您使用了 mm 两次。小写 m 表示分钟,大写 M 表示月。所以你的 dateFormat 应该是 dd/MM/yyyy HH:mm