微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

快速合并日期和时间

如何解决快速合并日期和时间

在模拟 json 文件中,我收到分隔的日期、开始时间、结束时间,因此我需要合并日期和开始日期,然后对结束日期执行相同操作。以前,我有过这样的约会:

23/03/2022

并且代码有效,现在我有了这个,这导致旧代码崩溃:

“2021-06-25T07:50:56.970Z”

我得到日期和我需要的时间的对象部分

"date": "2021-06-25T07:50:56.970Z","time": {
                        "from": "17:00","to": "18:00"
                      }

操纵此类日期的代码

public class ShortDateTimeFormatter: DateFormatter {
    
    override public init() {
        super.init()
        self.dateFormat = "dd/MM/yyyy HH:mm"
    }
    
    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
}

这里用作 let

private let shortTimeFormatter = ShortDateTimeFormatter()
          

在这里调用

 if let startTime = hours.from,let startDate = date.concats(startTime),let start = self.shortTimeFormatter.date(from: startDate) {
                    event.startDate = start
                    event.addAlarm(EKAlarm(absoluteDate: start.dayBefore))
                    event.addAlarm(EKAlarm(absoluteDate: start.halfHourBefore))
                    event.endDate = start.hourAfter
                }
        
            if let endTime = hours.to,let endDate = date.concats(endTime),let end = self.shortTimeFormatter.date(from: endDate) {
                event.endDate = end
            }

最终在这里使用

 guard let url = URL(string: "calshow:\(event.startDate.timeIntervalSinceReferenceDate)") else { return }

如何组合一个我现在可以使用的日期?换句话说,我认为我需要从“2021-06-25T07:50:56.970Z”中获取日/月/年,将“旧日期”之类的格式更严格,然后继续。或者可能需要一种不同的处理方式。

解决方法

这是您可以执行的操作。

import Foundation

let input = "2021-06-25T07:50:56.970Z"
let iso8601 = ISO8601DateFormatter()
iso8601.formatOptions = [.withFullDate,.withFullTime,.withFractionalSeconds]
if let date = iso8601.date(from: input) {
    var calendar = Calendar.current
    calendar.timeZone = TimeZone(secondsFromGMT: 0)! // same as your input time zone (and force cast tested only for UTC)
    let dateComps = calendar.dateComponents([.day,.month,.year],from: date)
    
    let start = "17:00"
    let startDate = dateByAppending(time: start,to: dateComps,using: calendar)
    
    let end = "18:00"
    let endDate = dateByAppending(time: end,using: calendar)
}

func dateByAppending(time: String,to dateComponents: DateComponents,using calendar: Calendar) -> Date? {
    var dateComps = dateComponents
    let timeComps = time.components(separatedBy: ":")
    if timeComps.count == 2 {
        dateComps.hour = Int(timeComps[0])
        dateComps.minute = Int(timeComps[1])
    }
    return calendar.date(from: dateComps)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。