【问题标题】:Number to Date - Swift迄今为止的数字 - 斯威夫特
【发布时间】:2015-07-14 06:43:41
【问题描述】:

获取一年中的某一天很简单,例如

func dayOfYear(inputDate:NSDate) -> (Int) {
    let cal         = NSCalendar.currentCalendar()
    let returnDay   = cal.ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: inputDate)
    return returnDay
}

但是你如何做相反的事情?它显然只会返回日/月。我可以轻松编写繁琐的例程反算,但有什么聪明的方法吗?

【问题讨论】:

标签: swift nsdate nscalendar


【解决方案1】:

是的,NSCalendar 提供了一种将日历组件合并为单个日期对象的方法。看看我在 Playground 中写的这个例子:

import UIKit
import Foundation

let inputDate: NSDate = NSDate()
let calendar = NSCalendar.currentCalendar()
let day = calendar.ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: inputDate)

let components = NSDateComponents()
components.day = day

let date = calendar.dateFromComponents(components)

根据文档,

当提供的组件不足以完全指定绝对时间时,日历会使用其选择的默认值。当信息不一致时,日历可能会忽略某些组件参数,或者该方法可能返回 nil。不必要的组件将被忽略(例如,Day 优先于 Weekday 和 Weekday 序数)。

此外,

请注意,某些计算可能需要相对较长的时间才能执行。

请参阅NSCalendar Class Reference 了解更多信息。

【讨论】:

  • @EdwardHasted 不客气,很高兴能帮上忙!
【解决方案2】:
func dayOfYear(inputDate: NSDate) -> Int {
    return NSCalendar.currentCalendar().ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: inputDate)
}

func dateFromDayOfYear(day: Int) -> NSDate {
    return NSCalendar.currentCalendar().dateWithEra(1, year: NSCalendar.currentCalendar().component(.CalendarUnitYear, fromDate: NSDate()), month: 1, day: day, hour: 0, minute: 0, second: 0, nanosecond: 0)!
}

let numberOfDays = dayOfYear(NSDate())   // 195

dateFromDayOfYear(numberOfDays)    // "Jul 14, 2015, 12:00 AM"

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2017-11-13
    • 2015-08-19
    • 2014-09-11
    相关资源
    最近更新 更多