gpt4 book ai didi

swift - 将带有 AM/PM 的字符串转换为 UserNotificationCenter 显示值

转载 作者:行者123 更新时间:2023-11-28 13:23:15 25 4
gpt4 key购买 nike

我正在尝试将时间值作为字符串接收,然后让通知使用该值作为触发器来显示。我的问题是通知采用这种格式来设置它的时间:

    var dateComponents = DateComponents()
dateComponents.hour = 06
dateComponents.minute = 30

let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)

我目前正在实现 this Stack Overflow post 中的以下内容从字符串中分离出 int 值。

let time = "7:30" //Would like to pass in "7:30 PM" instead
let components = time.characters.split { $0 == ":" } .map { (x) ->
Int in return Int(String(x))! }

let hours = components[0]
let minutes = components[1]

都不允许任何 AM/PM 信息。有没有一种简单的方法来获取一天中的时间并根据该输入设置通知?谢谢!

最佳答案

如果你想使用字符串,那么你可以对 ""进行额外的拆分,并检查你是否有 AM 或 PM,并根据它调整小时部分

let time = "7:30 PM" 
let firstSplit = time.split(separator: " ")
let components = firstSplit[0].split(separator: ":").compactMap { Int($0) }
let isPM = firstSplit[1] == "PM"
let hours = components[0] + (isPM ? 12 : 0)
let minutes = components[1]

当然,可能需要一些安全检查来验证输入字符串是否正确。

另一方面,如果您想要使用 Date 和 DateComponents,则可以像这样获得更简洁的解决方案

let formatter = DateFormatter()
formatter.timeStyle = .short
formatter.locale = Locale(identifier: "en_US_POSIX")

if let parsedTime = formatter.date(from: time) {
let dateComponents = Calendar.current.dateComponents([.hour, .minute], from: parsedTime)
}

关于swift - 将带有 AM/PM 的字符串转换为 UserNotificationCenter 显示值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com