如何解决快速合并日期和时间
在模拟 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 举报,一经查实,本站将立刻删除。