来自 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对象,然后使用两个DateFormatters将其格式化为您想要的格式 【参考方案1】:

让我们绕过2019-11-06 18:30:00 不能表示为Dec 58:00PM 的事实,专注于您需要的工作流程。

基本思路是:

    通过DateFormatterString 转换为Date 使用自定义DateFormatterDate 格式化为所需的“日期”值 使用自定义DateFormatterDate 格式化为所需的“时间”值

这可能看起来像...

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 66: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 格式

jqGrid 3.5 - 日期根本没有被格式化

如何将Google Visualization API的日期列转换为JSON格式

解决asp.net core 日期格式 datetime Json返回 带T的问题

json返回的日期格式怎么转换

JS中,JSON数组中日期格式转换的问题