2016-09-06 78 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])