Calendar.dateComponents(in: TimeZone, from: Date) returns bad .quarter, unusable with UNCalendarNotificationTrigger(dateMatching:repeats:)

Originator:tdejager
Number:rdar://35247464 Date Originated:30/10/2017
Status: Resolved:
Product:Foundation Product Version:Swift 3
Classification: Reproducible:
 
Summary:
Root cause: Calendar.dateComponents(in: TimeZone, from: Date) returns components with a .quarter value of 0 regardless of which quarter the date value lies in.
Flow-on effect: a user notification scheduled to these components with UNCalendarNotificationTrigger(dateMatching:repeats:) fails to trigger.

Steps to Reproduce:
Root cause:
        // On a date not in the first quarter of the year:
        var components = Calendar.current.dateComponents(in: TimeZone.current, from: Date().addingTimeInterval(15)) // see below for calendar, timezone etc settings
        // inspect components.quarter: returns 0

Flow-on effect:
        // these are needed for for presumably unrelated reasons
        // (unlike .quarter, the values I see look reasonable)
        components.weekday = nil
        components.weekdayOrdinal = nil
        components.weekOfMonth = nil
        components.weekOfYear = nil
        components.yearForWeekOfYear = nil
        let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: false)
        let content = UNMutableNotificationContent()
        content.title = "Message!"
        content.body = "Message body"
        let request = UNNotificationRequest(identifier: "request-identifier", content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)

Expected Results:
Root cause: components.quarter != 0
Flow-on effect: user notification scheduled and triggers.

Actual Results:
Root cause: components.quarter == 0
Flow-on effect: user notification never triggers. It can be made to trigger by setting components.quarter to the correct value, which shows the notification-scheduling issue is directly caused by this bug.

Version/Build:
Xcode Version 8.3.3 (8E3004b)
iOS simulator, iOS version 10.3.1 (14E8301)

Configuration:
I don't know how many of these are needed to reproduce:
* Calendar .gregorian
* Timezone "Europe/Athens"
* Date 30 October 2017 (presumably anything outside of the first quarter will do)

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!