首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用upperBound < lowerBound形成范围

不能用upperBound < lowerBound形成范围
EN

Stack Overflow用户
提问于 2019-07-13 17:36:15
回答 1查看 389关注 0票数 2

我试图从如下所示的服务器响应中获取日期:

"dateStart":"2019-08-21T14:54:03.285108Z", "dateEnd":"2019-09-20T06:15:03.285108Z“

因为我只需要从日期到月份,所以结果是:"08-21“和"09-20”。

我确实试过去过滤结果,但我要崩溃了:

线程1:致命错误:无法使用upperBound < lowerBound形成范围

这是我的代码:

代码语言:javascript
复制
    let startTime = dealStatus["dateStart"] as? String
    let startFirst = startTime!.index(startTime!.startIndex, offsetBy: 5)
    let endFirst = startTime!.index(startTime!.endIndex, offsetBy: -17)
    let startTimeString = startTime![startFirst..<endFirst] // Getting crash here

    let endTime = dealStatus["dateEnd"] as? String
    let startSecond = endTime!.index(endTime!.startIndex, offsetBy: 5)
    let endSecond = endTime!.index(endTime!.endIndex, offsetBy: -17)
    let endTimeString = endTime![startSecond..<endSecond]

    let startReplaced = startTimeString.replacingOccurrences(of: "-", with: ".")
    let endReplaced = endTimeString.replacingOccurrences(of: "-", with: ".")
    let startEndDates = "(" + String(startReplaced) + " - " + String(endReplaced) + ")"
    //
    let orderTitle = ordersResponseArray[indexPath.row]
    let catTitle = orderTitle["title"] as? String
     cell.titleAndDatesLabel.text = catTitle! + " " + startEndDates

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 13:01:02

您应该首先使用DateFormatter或ISO8601DateFormatter将您的日期字符串(即UTC时间)解析为date对象,并从结果日期中获取月和日表示:

代码语言:javascript
复制
extension Formatter {
    static let monthDay: DateFormatter = {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        dateFormatter.dateFormat = "MM.dd"
        return dateFormatter
    }()
}
代码语言:javascript
复制
extension Formatter {
    static let iso8601: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
        return formatter
    }()
}

游乐场测试:

代码语言:javascript
复制
let dealStatus: [String: Any] = ["dateStart": "2019-08-21T14:54:03.285108Z",
                                 "dateEnd"  : "2019-09-20T06:15:03.285108Z"]

if let dateStart = dealStatus["dateStart"] as? String,
    let dateEnd = dealStatus["dateEnd"] as? String,
    let start = Formatter.iso8601.date(from: dateStart),
    let end = Formatter.iso8601.date(from: dateEnd) { // ,
//  let catTitle = ordersResponseArray[indexPath.row]["title"] as? String {

    let startTime = Formatter.monthDay.string(from: start)
    let endTime = Formatter.monthDay.string(from: end)
    let startEndDates = "(" + startTime + " - " + endTime + ")"
    print(startEndDates)  // "(08.21 - 09.20)"
    //    cell.titleAndDatesLabel.text = catTitle + " " + startEndDates
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57021450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档