使用非公历日历创建UNNotification

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用非公历日历创建UNNotification相关的知识,希望对你有一定的参考价值。

我正在构建我的应用程序以在ios swift 4中发送每日,每周和每月通知。通知使用公历完美地工作。但是,当我将日期更改为Hijri日历(日历(标识符:.islamicUmmAlQura)时,它不是wrk。它接缝UNCalendarNotificationTrigger将任何日期转换为公历。下面的每月通知代码在使用公历时非常有效:

func myNotification(at date: Date, withTitle title:String, andBody body:String, notificationIdentifier:String) {

let calendar = Calendar(identifier: .gregorian)
let components = calendar.dateComponents([.day,.hour, .minute], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = UNNotificationSound.init(named: "notificationSound.wav")
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [notificationIdentifier])
UNUserNotificationCenter.current().add(request) {(error) in
    if let error = error {
        print(" error: (error)")
    }
}

}

当我使用(日历(标识符:.islamicUmmAlQura)将日期转换为伊斯兰日期时,以下代码不起作用:

func myNotification(at date: Date, withTitle title:String, andBody body:String, notificationIdentifier:String) {

let calendar = Calendar(identifier: .islamicUmmAlQura)
let components = calendar.dateComponents([.day,.hour, .minute], from: date)
let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
let content = UNMutableNotificationContent()
content.title = title
content.body = body
content.sound = UNNotificationSound.init(named: "notificationSound.wav")
let request = UNNotificationRequest(identifier: notificationIdentifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [notificationIdentifier])
UNUserNotificationCenter.current().add(request) {(error) in
    if let error = error {
        print(" error: (error)")
    }
}
答案

将日历类型添加到触发器后,它可以工作

trigger = UNCalendarNotificationTrigger(calendar:calendar, dateMatching: components, repeats: true)
另一答案

如果UserNotifications框架期望在特定日历中解释DateComponents,那么这就是您必须使用的日历。这并不意味着基础日期时间将发生变化或不正确。

Date只是时间轴上的一个点。时间线如何划分和命名是日历的函数,但Date本身并不知道或不关心。无论您选择何种描述或分解,时间轴上的点都保持不变。

参看Convert NSDates from one calendar to another

以上是关于使用非公历日历创建UNNotification的主要内容,如果未能解决你的问题,请参考以下文章

JPA 和公历日历

iOS中的日历

PHP 农历公历互转,八字排盘,星座,日历,支持从-1000到3000年间的排盘,二十四节气

Android 中的埃塞俄比亚日历

在 impala 中将儒略日期转换为公历日期

如何将公历字符串转换为公历?