Ответ 1
Используйте следующий формат строки, чтобы преобразовать строку сервера в Date
dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
Я делаю HTTP-запрос на сервер и возвращаю json-объект с строкой даты следующим образом:
{
name = "Place1";
temperature = 79;
humidity = 68;
reported_at = "2013-07-21T19:32:00Z";
}
Я хочу отформатировать файл report_at, чтобы я мог отображать читаемую дату и время для пользователя.
Это быстрый код, который я пытаюсь сохранить, который возвращает nil, поскольку он не может отформатировать дату.
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? Я хочу отображать дату и время для пользователя, чтобы они могли знать, когда было сделано чтение.
Используйте следующий формат строки, чтобы преобразовать строку сервера в Date
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
}
let json = """
{"name" : "Place1", "temperature" : 79, "humidity" : 68, "reported_at" : "2013-07-21T19:32:00Z"}
"""
let data = Data(json.utf8)
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
decoder.keyDecodingStrategy = .convertFromSnakeCase
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 ))!
Deserialize:
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")
Кроме того, проверьте датуФормат, который вы хотите отсюда. 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
будет вашим String.Hope, это поможет кому-то