【问题标题】:Setting calendar unit month in swift increase the year快速设置日历单位月份增加年份
【发布时间】:2016-09-06 13:30:20
【问题描述】:

以下代码应该将当前年份设置为第一天:

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

【问题讨论】:

  • 那么你得到了什么价值?它为我提供了正确的结果。您是否知道 print(date) 以 UTC 而不是您当地的时区打印日期?
  • 我在我的问题中包含了这些值。 print 中的 UTC 实际上不是问题。
  • 什么是开始日期,结束日期?请发布一个可重复的、独立的示例,包括打印语句。
  • dateBySettingUnit 可以更改“更高”的组件,所以是的,您的方法可能会失败。

标签: swift swift2


【解决方案1】:

NSCalendar 的方法nextDateAfterDate:matchingComponents:options: 更适合那个目的,它也可以向后搜索过去的 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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多