Je fais une requête http get à un serveur et récupère un objet JSON avec une chaîne de date comme celle-ci:
{
name = "Place1";
temperature = 79;
humidity = 68;
reported_at = "2013-07-21T19:32:00Z";
}
Je souhaite formater la clé de reports (Report_at) afin de pouvoir afficher une date et une heure lisibles par l'utilisateur.
C’est le code Swift que j’essaie et qui revient sans cesse, car il ne peut pas formater la date.
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)
Comment puis-je formater correctement la date et l'heure avec Swift? Je souhaite afficher la date et l'heure à l'utilisateur afin qu'il puisse savoir quand la lecture a été effectuée.
Utilisez le format de chaîne suivant pour convertir une chaîne de serveur en date.
dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
De nos jours (septembre 2017), dans Swift 4, il existe des moyens plus intelligents de décoder 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)
Si vous utilisez SwiftDate (vous devriez probablement!) Utilisez simplement:
Sérialiser:
let date:NSDate = ....
let dateInRegion = DateInRegion( absoluteTime: date )
let serializedString:String = dateInRegin.toString( .ISO8601Format( .Full ))!
Désérialiser:
let serializedDate:String = "2016-03-01T22:10:55.200Z"
let date:NSDate? = serializedDate.toDateFromISO8601()
Voici ma réponse en utilisant extension
dans Swift4
.
extension String {
func toDate(dateFormat: String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
let date: Date? = dateFormatter.date(from: self)
return date
}
Utilisation simple
let str = "2013-07-21T19:32:00Z";
let dateStr = str.toDate(dateFormat: "yyyy-MM-dd'T'HH:mm:ssZ")
Vérifiez également la dateFormat que vous souhaitez à partir d’ici. ISO 8601
Pour convertir JSON
Chaîne en Date et heure dans Swift 3.0
, utilisez le code ci-dessous: -
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))
où checkInTime
sera votre String.Hope cela aidera quelqu'un