字符串日期和NSDate之间通过XCode中的dateFromString不匹配

时间:2015-07-12 15:33:16

标签: ios xcode string nsdate

我遇到了在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)

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

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

您的日期格式错误。

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

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