ios - 日历组件是负数
问题描述
我正在尝试以人类可读格式获取时间间隔,例如 20 分钟前
我从服务器获取如下日期(来自服务器的日期是过去的日期)
"2019-02-06T16:42:41.908Z"
我正在使用以下日期格式化程序
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let date = dateFormatter.date(from: dateString)
现在,当我尝试使用以下获取日期组件时
let interval = Calendar.current.dateComponents([.year, .month, .day,.hour, .minute], from: serverDate, to: Date())
我得到了负面的分钟数
(lldb) p interval.minute
(Int?) $R2 = -9
请让我知道我在这里做错了什么。任何想法或建议都会很棒。
解决方案
您正在使用方法dateComponents(_:from:to:)返回两个日期之间的差异。根据两个日期的顺序,差异可能是负数。
例如:
let interval = Calendar.current.dateComponents([...], from: date1, to: date2)
时将返回负区间date1 > date2
。
当date2
isDate()
时,即当前日期,负值表示日期在未来。
推荐阅读
- c++ - 使用 GMP 库 C++ 的大素数循环
- haskell - 使用 GHC 编译时内存不足
- r - R 中字符串的 tidyr fill() 是否有等价物?
- java - 将非常大的内容放入字符串或字符串构建器中
- javascript - 一次性解构对象并重新分配给不同的变量名
- django - 如何在 django - postgresql 中临时禁用数据库完整性约束
- vba - 在 VBA 中使用 CurrentDb.OpenRecordset
- lua - 函数“fwd_prop_enc”中的错误:尝试调用全局“转发”(零值)
- php - 根据元素位置创建新数组
- python - Pandas 将特定列乘以行中的值