【问题标题】:Convert String with AM/PM to UserNotificationCenter Show Value将带有 AM/PM 的字符串转换为 UserNotificationCenter 显示值
【发布时间】:2019-11-10 16:19:06
【问题描述】:

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

    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 信息。有没有一种简单的方法来获取一天中的时间并根据该输入设置通知?谢谢!

【问题讨论】:

    标签: swift date time


    【解决方案1】:

    如果你想使用字符串,那么你可以在 "" 上做一个额外的拆分,并检查你是否有 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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 2020-04-23
      • 2021-12-31
      相关资源
      最近更新 更多