用一个工作日和一小时在Swift中创建一个日期对象

时间:2016-11-21 18:33:56

标签: swift date nsdate nscalendar

我环顾四周,找不到我需要的东西。

这就是我需要的东西:

在Swift中,我想创建一个Date(或NSDate)对象,它表示一周中的某一天,以及该工作日的特定时间。我不在乎岁月。

这是因为我有一个重复每周活动的系统(特定工作日的会议,特定时间,例如"每周一晚上8点")。

这是我到目前为止的代码(不起作用):

/* ################################################################## */
/**
 :returns: a Date object, with the weekday and time of the meeting.
 */
var startTimeAndDay: Date! {
    get {
        var ret: Date! = nil
        if let time = self["start_time"] {
            let timeComponents = time.components(separatedBy: ":")
            let myCalendar:Calendar = Calendar.init(identifier: Calendar.Identifier.gregorian)
            // Create our answer from the components of the result.
            let myComponents: DateComponents = DateComponents(calendar: myCalendar, timeZone: nil, era: nil, year: nil, month: nil, day: nil, hour: Int(timeComponents[0])!, minute: Int(timeComponents[1])!, second: nil, nanosecond: nil, weekday: self.weekdayIndex, weekdayOrdinal: nil, quarter: nil, weekOfMonth: nil, weekOfYear: nil, yearForWeekOfYear: nil)
            ret = myCalendar.date(from: myComponents)
        }

        return ret
    }
}

将PAR日期纳入其中的方法很多,但我想创建一个Date对象以便稍后解析。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

(NS)Date表示绝对时间点,对工作日,小时,日历,时区等一无所知。内部代表 自“参考日期”2001年1月1日GMT。以来的秒数。

如果您正在使用EventKit,则可能是EKRecurrenceRule 更适合。它是一个用于描述重复事件的重复模式的类。

或者,将事件存储为DateComponentsValue,然后 必要时计算具体的Date

示例:每周一晚上8点开会:

let meetingEvent = DateComponents(hour: 20, weekday: 2)

下一次会议是什么时候?

let now = Date()
let cal = Calendar.current
if let nextMeeting = cal.nextDate(after: now, matching: meetingEvent, matchingPolicy: .strict) {
    print("now:", DateFormatter.localizedString(from: now, dateStyle: .short, timeStyle: .short))
    print("next meeting:", DateFormatter.localizedString(from: nextMeeting, dateStyle: .short, timeStyle: .short))
}

输出:

now: 21.11.16, 20:20
next meeting: 28.11.16, 20:00