NSDate在Swift中返回错误的日期

时间:2016-01-31 17:40:11

标签: ios swift nsdate nsdateformatter nsdatecomponents

今天是2016年2月1日,我刚打开我的工作应用程序继续我的工作,这让我感到震惊。

Image

这是日期的集合视图,我在1月份没有发现任何错误,因为它还没有一个月。

这是代码,

func dF(someDate:NSDate) -> (String){
let monthFormat = NSDateFormatter()
let dayFormat = NSDateFormatter()
monthFormat.dateFormat = "MMM"
dayFormat.dateFormat = "D"

let aMonth = monthFormat.stringFromDate(someDate)
let aDay = dayFormat.stringFromDate(someDate)

//concatenate strings
let conString = aMonth + " " + aDay

return (conString)
}


//from today to 7th day, to be used in ScrollView
let day1 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: 0, toDate: NSDate(), options: [])
let day2 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -1, toDate: NSDate(), options: [])
let day3 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: [])
let day4 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -3, toDate: NSDate(), options: [])
let day5 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -4, toDate: NSDate(), options: [])
let day6 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -5, toDate: NSDate(), options: [])
let day7 = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -6, toDate: NSDate(), options: [])
let titles = [dF(day1!), dF(day2!), dF(day3!), dF(day4!), dF(day5!), dF(day6!), dF(day7!)]

我期望day1将当前日期传递给dF函数并格式化。

所以我进行了一些检查,以确保我得到了正确的日期 当前时间:2016年2月1日,我的时区上午1:08

print(day1)
print(day2)
print(ddd)

以下是控制台的结果:

可选(2016-01-31 17:08:47 +0000)

可选(2016-01-30 17:08:47 +0000)

2月32日

我怀疑我的NSDateComponent未正确设置/与本地时区相同。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  1. 您使用的是日期错误的说明符。
  2. 您正在以最难的方式创建日期字符串。
  3. 试试这个:

    Swift 3/4:

    func dF(_ someDate: Date) -> String {
        let format = DateFormatter()
        format.dateFormat = "MMM d"
        // For a more localized format, use the following instead:
        // format.setLocalizedDateFormatFromTemplate("MMMd")        
    
        let conString = format.string(from: someDate)
    
        return conString
    }
    

    Old Swift 2回答:     func dF(someDate:NSDate) - > (串){         let format = NSDateFormatter()         format.dateFormat =“MMM d”

        let conString = format.stringFromDate(someDate)
    
        return (conString)
    }
    

答案 1 :(得分:0)

更多Swifty方式来解决您的问题。适用于Swift 3及以上版本。

let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "MMM d"
let result = formatter.string(from: date)

输出

"May 12"