来自 url 的日期格式 (JSON)
Posted
技术标签:
【中文标题】来自 url 的日期格式 (JSON)【英文标题】:Date format from url (JSON) 【发布时间】:2019-12-06 00:29:20 【问题描述】:我如何能够从 URL 中获取日期格式并将其转换为 SwiftUI
中的 2 个单独的日期值。 JSON 的格式是 2019-11-06 18:30:00
,我正试图让它显示为 12 月 5 日,并且还希望它能够分隔时间并显示晚上 8:00,这可能吗?
这是引用开始时间的代码:
let startTime: String
var startTime: String
return self.post.startTime
【问题讨论】:
将String
解析为Date
对象,然后使用两个DateFormatter
s将其格式化为您想要的格式
【参考方案1】:
让我们绕过2019-11-06 18:30:00
不能表示为Dec 5
和8:00PM
的事实,专注于您需要的工作流程。
基本思路是:
-
通过
DateFormatter
将String
转换为Date
使用自定义DateFormatter
将Date
格式化为所需的“日期”值
使用自定义DateFormatter
将Date
格式化为所需的“时间”值
这可能看起来像...
let startTime = "2019-11-06 18:30:00"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
if let date = formatter.date(from: startTime)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d"
let dateString = dateFormatter.string(from: date)
let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "h:ma"
let timeString = timeFormatter.string(from: date)
else
print("Bad date/format")
在我的测试中,这会输出 Nov 6
和 6:30PM
【讨论】:
道歉我还是新手,我正在尝试将其放入列表中,以便它从 url 收集日期和时间,然后我希望它单独显示日期和时间在列表视图中。您知道我如何实现此代码以便获取值吗?我已经尝试在自己中添加它,但它只是显示错误 最简单的解决方案是尽快将日期/时间值从 JSON 中获取到Date
,这构成了您的模型的一部分。然后,您会将其传递到您的视图中,然后您将决定如何显示它
唯一的问题是我不知道把上面的代码放在哪里,我有 2 个引用 startTime 字符串的类,这两行都是 let startTime: String 和 var startTime: String return self .post.startTime 理想情况下我需要把它放在哪里,这样我才能正确地隐藏它。抱歉,如果不清楚,我是 swift 新手,整个 JSON 的东西很难理解
我会使用 Swift 对 JSON 解码的内置支持。看看Swift Codable With Custom Dates 和Decoding Formatted JSON Dates in Swift 作为起点【参考方案2】:
您可以使用此函数将您的字符串日期传递给日期
func stringToDate(date: String, format: String) -> Date
let date2 = date.count == 0 ? getCurrentDate(format: "dd-MM-yyyy") : date
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone.init(identifier: "América/Mexico_City")
dateFormatter.dateFormat = format
let dateDate = dateFormatter.date(from: date2)
return dateDate!
func getCurrentDate(format: String) -> String
let formD = DateFormatter()
formD.dateFormat = format
let str = formD.string(from:Date())
return str
let dateA = stringToDate(date: "2019-11-06 18:30:00", format: "yyyy-MM-dd HH:mm:ss")
if dateA < Date() //Date() always will be the current date, including the time
print("dateA is older")
else
print("dateA in newer")
使用examples formats的格式
【讨论】:
嗨,我已经厌倦了这个,但收到一条错误消息 - Use of unresolved identifier 'getCurrentDate' 嗨 Andres,谢谢你,我已经设法让它现在编译,但是当我运行它时,它崩溃了。我收到此错误:线程 1:致命错误:在展开可选值时意外发现 nil。你知道如何解决这个问题吗? @ItsOliMate 请再试一次 抱歉,返回 dateDate 行仍然出现同样的错误! 这个功能是怎么使用的?请记住,更改日期字符串的格式,您的日期字符串就像这种格式“2019-11-06 18:30:00”?我用其他日期更新了我的答案以上是关于来自 url 的日期格式 (JSON)的主要内容,如果未能解决你的问题,请参考以下文章
在 jquery 数据表中显示之前将 json 日期格式化为 mm/dd/yy 格式
如何将Google Visualization API的日期列转换为JSON格式