Как отформатировать строку даты JSON с помощью Swift?
Я делаю запрос http get на сервер и возвращаю объект json со строкой даты, как это:
{
name = "Place1";
temperature = 79;
humidity = 68;
reported_at = "2013-07-21T19:32:00Z";
}
Я хочу отформатировать ключ reported_at, чтобы я мог отображать читаемую дату и время для пользователя.
Это swift-код, который я пытаюсь, который продолжает возвращать ноль, так как он не может отформатировать дату.
var str = "2013-07-21T19:32:00Z"
var dateFor: NSDateFormatter = NSDateFormatter()
dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ss:SSS"
var yourDate: NSDate? = dateFor.dateFromString(str)
println(yourDate)
Как правильно отформатировать эту дату и время с помощью Swift? Я хочу показать дату и время пользователю, чтобы они могли знать, когда чтение было принято.
5 ответов
используйте следующий формат строки для преобразования строки сервера в дату
dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
В настоящее время (сентябрь 2017) в Swift 4 есть более умные способы декодирования ISO8601:
-
ISO8601DateFormatter
let str = "2013-07-21T19:32:00Z" let formatter = ISO8601DateFormatter() let yourDate = formatter.date(from: str)
-
JSONDecoder
struct Place : Decodable { let name : String let temperature : Int let humidity : Int let reportedAt : Date private enum CodingKeys: String, CodingKey { case name, temperature, humidity case reportedAt = "reported_at" } } let json = """ {"name" : "Place1", "temperature" : 79, "humidity" : 68, "reported_at" : "2013-07-21T19:32:00Z"} """ let data = json.data(using: .utf8) let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 let place = try! decoder.decode(Place.self, from: data!)
Если вы используете SwiftDate (вы, наверное, должны!) просто используйте:
сериализовать:
let date:NSDate = ....
let dateInRegion = DateInRegion( absoluteTime: date )
let serializedString:String = dateInRegin.toString( .ISO8601Format( .Full ))!
десериализовать:
let serializedDate:String = "2016-03-01T22:10:55.200Z"
let date:NSDate? = serializedDate.toDateFromISO8601()
вот мой ответ, используя extension
на Swift4
.
extension String {
func toDate(dateFormat: String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
let date: Date? = dateFormatter.date(from: self)
return date
}
Простота Использования
let str = "2013-07-21T19:32:00Z";
let dateStr = str.toDate(dateFormat: "yyyy-MM-dd'T'HH:mm:ssZ")
кроме того, проверьте dateFormat, который вы хотите отсюда. ISO 8601
Для Преобразования JSON
строка для даты и времени в Swift 3.0
Использовать Ниже Код:-
let timeinterval : TimeInterval = (checkInTime as! NSString).doubleValue
let dateFromServer = NSDate(timeIntervalSince1970:timeinterval)
print(dateFromServer)
let dateFormater : DateFormatter = DateFormatter()
//dateFormater.dateFormat = "dd-MMM-yyyy HH:mm a" // 22-Sep-2017 14:53 PM
dateFormater.dateFormat = "dd-MMM-yyyy hh:mm a" // 22-Sep-2017 02:53 PM
print(dateFormater.string(from: dateFromServer as Date))
здесь checkInTime
будет ваша строка.Надеюсь, это поможет кому-то