2016-09-06 96 views
1

下面的代码应该在当年设定的第一天:设置日历单位每月一年

import UIKit 

private func getYearStartDate() -> NSDate { 
    let calendar = NSCalendar.currentCalendar() 

    var date = calendar.dateBySettingHour(0, minute: 0, second: 0, ofDate: NSDate(), options: []) 
    date = calendar.dateBySettingUnit(.Month, value: 1, ofDate: date!, options: []) 
    date = calendar.dateBySettingUnit(.Day, value: 1, ofDate: date!, options: []) 

    return date! 
} 

print("startdate=\(getYearStartDate())") 
print("enddate=\(NSDate())") 

但是,当我检查它的值设置为的第一天明年。

我的结果:

startdate=2017-01-01 02:00:00 +0000 
enddate=2016-09-06 13:44:06 +0000 

结果我想到:

startdate=2016-01-01 02:00:00 +0000 
enddate=2016-09-06 13:44:06 +0000 
+0

那么你有什么价值?它给我一个正确的结果。您是否知道'print(date)'以UTC打印日期而不是当地时区? –

+0

我在我的问题中包含了这些值。实际上,'print'中的UTC并不是问题。 –

+0

什么是startdate,enddate?请发布一个可重复的自包含示例,包括打印声明。 –

回答

0

方法的NSCalendarnextDateAfterDate:matchingComponents:options:更适合于这一目的,它也可以向后搜索过去一月第一张:

let calendar = NSCalendar.currentCalendar() 
let components = NSDateComponents() 
components.month = 1 
components.day = 1 
let yearStartDate = calendar.nextDateAfterDate(NSDate(), 
          matchingComponents: components, 
             options: [.MatchNextTime, .SearchBackwards])