2016-09-06 9 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 

結果:メソッドNSCalendarnextDateAfterDate:matchingComponents:options:は、その目的のために、より適している

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

あなたはどんな価値がありますか?それは私にとって正しい結果をもたらします。 'print(date)'はあなたのローカルタイムゾーンではなく、UTCで日付を出力することに気づいていますか? –

+0

私は質問に値を含めました。 'print'のUTCは実際問題ではありません。 –

+0

開始日、終了日は何ですか? printステートメントを含む、再現可能な、自己完結型の例を投稿してください。 –

答えて

0

、それはまた、過去1月のために逆方向に検索することができます第1:

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