- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试从如下所示的服务器响应中获取日期:
"dateStart": "2019-08-21T14:54:03.285108Z",
"dateEnd": "2019-09-20T06:15:03.285108Z"
因为我只需要日期和月份,所以结果将是:“08-21”和“09-20”
我确实尝试过过滤结果,但我遇到了崩溃:
Thread 1: Fatal error: Can't form Range with upperBound < lowerBound
这是我的代码:
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
如有任何帮助,我们将不胜感激!
最佳答案
您应该首先使用 DateFormatter 或 ISO8601DateFormatter 将 UTC 时间的日期字符串解析为日期对象,并从生成的日期中获取月和日表示形式:
extension Formatter {
static let monthDay: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "MM.dd"
return dateFormatter
}()
}
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
}()
}
Playground 测试:
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
}
关于ios - 无法形成范围与 upperBound < lowerBound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021450/
我正在尝试从如下所示的服务器响应中获取日期: "dateStart": "2019-08-21T14:54:03.285108Z", "dateEnd": "2019-09-20T06:15:03.2
下面是我试图运行的代码: class Student { def printDetails = println("I am a student") def printSomeOtherDeta
我正在尝试使用 spark-jdbc 读取 postgres 数据库上的表。为此,我想出了以下代码: object PartitionRetrieval { var conf = new Spa
在 Spark 中通过 JDBC 连接从 SQL Server 获取数据时,我发现我可以设置一些并行化参数,例如 partitionColumn , lowerBound , upperBound ,
我理解 PECS(生产者扩展,消费者 super )的概念,但对这些符号仍然感到困惑: public class PECSTest { public static void main(Stri
我想保护我的变量免于存储溢出值。 我正在计算树中每个级别和某些阶段的损失。 它给出类似 4.94567e+302 的值;这个值正确吗?如果我将它(如最小值、最大值等)与任何其他值进行比较。它会给出正确
已阅读 this question及其答案,我得出的结论是这两种算法没有标准实现。不过,首先要介绍一些背景知识: 我们大多数人都熟悉 binarySearch 。这个想法是,给定一个排序数组(或Col
let range = 3..<3 // lowerBound == upperBound Swift 标准库在多个地方使用这种类型的范围,例如在数组 insert(_, at:) 中方法。 Arra
我有一个类,我想用 for 循环在其中添加值。 这是我的课: public class Expandable { public var name: String public var
我尝试使用动画来关闭菜单,我决定在按下按钮时减小 UIScrollView 的大小,当大小减小到我想要的值时,然后将其隐藏。 为了在某些时候根据我想要的用户界面完成任务,我使用了“时间延迟功能”(给定
我是一名优秀的程序员,十分优秀!