À l'aide de DateFormatter sur un timestamp Unix
- Je obtenir un crash lors de l'exécution et de points à la dateFormmater.timezone
.
L'erreur dans la console:
Pourrait ne pas jeter de valeur de type 'Swift.Facultatif (0x1192bf4a8) à "NSTimeZone' (0x1192c0270).
la valeur de rowEvents.date
est "1480134638.0"
Im essayant de sortir d'un timestamp Unix de Firebase enregistré comme une chaîne de caractères. Le convertir à la Date et à nouveau enregistrer comme une chaîne de caractères afin que je puisse l'afficher sur une étiquette de la cellule.
J'ai eu ce code de StackOverflow. J'ai branché mes données et tout est bon jusqu'à ce que je le lance. Je suppose que tout n'est pas tout bon...
if let lastUpdated : String = rowEvents.date {
let epocTime = TimeInterval(lastUpdated)! / 1000 //convert it from milliseconds dividing it by 1000
let unixTimestamp = NSDate(timeIntervalSince1970: epocTime) //convert unix timestamp to Date
let dateFormatter = DateFormatter()
dateFormatter.timeZone = NSTimeZone() as TimeZone!
dateFormatter.locale = NSLocale.current //NSLocale(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateFormatter.date(from: String(describing: unixTimestamp))
let updatedTimeStamp = unixTimestamp
let cellDate = DateFormatter.localizedString(from: updatedTimeStamp as Date, dateStyle: DateFormatter.Style.full, timeStyle: DateFormatter.Style.medium)
cell.subtitleLabel.text = cellDate
}
Le résultat est entré à partir de ce code ici:
let myTimeStamp = self.datePicker?.date.timeIntervalSince1970
let calendarDate = String(describing: myTimeStamp! /** 1000*/)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez convertir
unixTimestamp
à jour à l'aide deDate(timeIntervalSince1970:)
.Si vous souhaitez afficher la date en chaîne de caractères spécifiques de formiate que vous pouvez utiliser
DateFormatter
comme de cette façon.TimeZone(abbreviation: "GMT")
— enfin, quelqu'un a utiliséTimeZone
constructeurs au lieu deNSTimeZone
avec casting.DateFormatter
méthodedate(from:)
une fois que vous avezDate
objet que vous pouvez facilement obtenir le timestamp à partir d'elleLe problème est la ligne
dateFormatter.timeZone = NSTimeZone() as TimeZone!
.Simplement utiliser
TimeZone
au lieu deNSTimeZone
commedateFormatter.timeZone = TimeZone.current
et votre code fonctionne.Vous pouvez également supprimer votre
/1000
parce que1480134638.0
ressemble plus à de secondes que millisecondes (depuis 1970).Swift 4.1. J'ai créé une fonction. Il suffit de passer vous timeStamp en fonction de param et de la fonction renverra les données dans le type de données string. Vous pouvez ajouter plus de propriétés à DateFormatter objet.
À l'aide de jeux que je n'ai fait cela.
Est de retour cette - 2019-01-18 23:50:46 +0000
Cette solution est valable pour swift 3 -> 4.2 :
vous pouvez ajouter une extension sur le Double qui retourne la date au format:
exemple ci-dessus :