时间和日期格式化程序 SwiftUI JSON 数据

Its*_*ate 2 swift swift5 swiftui

希望这是一个简单的过程。我正在尝试使用 SwiftUI 在 iOS 应用程序中的列表中显示日期和时间。我目前的代码有问题并收到以下错误消息:Cannot convert value of type 'PostListViewModel' to expected argument type 'Data'

请找到下面的代码:

struct PostViewModel {
    var post: Post
    init(post: Post) {
        self.post = post
    }
    var startTime: Date {       
        let data = PostListViewModel()
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .formatted(DateFormatter.DateFormat)
        let postDate = try! decoder.decode(startTime.self, from: data)
        return self.post.startTime
    }    
}
Run Code Online (Sandbox Code Playgroud)
extension DateFormatter {
    static let DateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "MMM d"
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        return formatter
    }()
}
Run Code Online (Sandbox Code Playgroud)

您能看到代码有什么问题吗?

vad*_*ian 5

如果要将日期字符串转换为 a Date,然后再转换为另一个日期字符串,请使用一个日期格式化程序和两个不同的日期格式字符串

struct PostViewModel {
    var post: Post

    init(post: Post) {
        self.post = post
    }

    var startTime: String {       
        let formatter = DateFormatter()
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        if let date = formatter.date(from: post.startTime) {      
           formatter.dateFormat = "MMM d"
           return formatter.string(from: date)
        } else {
           return post.startTime
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)