web-dev-qa-db-fra.com

Swift convertir l'heure unix en date et heure

Mon code actuel:

if  let var timeResult = (jsonResult["dt"] as? Double) {
    timeResult = NSDate().timeIntervalSince1970
    println(timeResult)
    println(NSDate())
}

Les resultats:

println(timeResult) = 1415639000.67457

println(NSDate()) = 2014-11-10 17:03:20 +0000 était juste pour tester pour voir ce que NSDate fournissait. 

Je veux que le premier ressemble au dernier. La valeur pour dt = 1415637900.

Aussi, comment puis-je m'adapter au fuseau horaire? Fonctionnant sur iOS .

35
MwcsMac

Pour obtenir la date à afficher comme fuseau horaire actuel, j’ai utilisé ce qui suit.

if  let timeResult = (jsonResult["dt"] as? Double) {
  let date = NSDate(timeIntervalSince1970: timeResult)
  let dateFormatter = NSDateFormatter()
  dateFormatter.timeStyle = NSDateFormatterStyle.MediumStyle //Set time style
  dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle //Set date style
  dateFormatter.timeZone = NSTimeZone()
  let localDate = dateFormatter.stringFromDate(date)
  self.defaults.setObject(localDate, forKey: "localdate")
}

Version Swift 3.0

if  let  timeResult = (jsonResult["dt"] as? Double) {
        let date = Date(timeIntervalSince1970: timeResult)
        let dateFormatter = DateFormatter()
        dateFormatter.timeStyle = DateFormatter.Style.medium //Set time style
        dateFormatter.dateStyle = DateFormatter.Style.medium //Set date style
        dateFormatter.timeZone = self.timeZone
        let localDate = dateFormatter.string(from: date)


}
34
MwcsMac

Vous pouvez obtenir une date avec cette valeur en utilisant l'initialiseur NSDate(withTimeIntervalSince1970:):

let date = NSDate(timeIntervalSince1970: 1415637900)
87
Nate Cook

Il est simple de convertir le timestamp Unix au format souhaité. Supposons que _ts soit l’horodatage Unix long

let date = NSDate(timeIntervalSince1970: _ts)

let dayTimePeriodFormatter = NSDateFormatter()
dayTimePeriodFormatter.dateFormat = "MMM dd YYYY hh:mm a"

 let dateString = dayTimePeriodFormatter.stringFromDate(date)

  print( " _ts value is \(_ts)")
  print( " _ts value is \(dateString)")
29
Sachin Tyagi

Pour gérer les dates dans Swift 3, j'ai obtenu cette fonction d'assistance:

extension Double {
    func getDateStringFromUTC() -> String {
        let date = Date(timeIntervalSince1970: self)

        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "en_US")
        dateFormatter.dateStyle = .medium

        return dateFormatter.string(from: date)
    }
}

De cette façon, il est facile à utiliser quand vous en avez besoin - dans mon cas, il convertissait une chaîne:

("1481721300" as! Double).getDateStringFromUTC() // "Dec 14, 2016"

Référencez le DateFormatter docs pour plus de détails sur le formatage (notez que certains exemples ne sont plus à jour)

J'ai trouvé cet article être très utile aussi

10
crobicha
func timeStringFromUnixTime(unixTime: Double) -> String {
    let date = NSDate(timeIntervalSince1970: unixTime)

    // Returns date formatted as 12 hour time.
    dateFormatter.dateFormat = "hh:mm a"
    return dateFormatter.stringFromDate(date)
}

func dayStringFromTime(unixTime: Double) -> String {
    let date = NSDate(timeIntervalSince1970: unixTime)
    dateFormatter.locale = NSLocale(localeIdentifier: NSLocale.currentLocale().localeIdentifier)
    dateFormatter.dateFormat = "EEEE"
    return dateFormatter.stringFromDate(date)
}
5
Durul Dalkanat

Voici une solution/ Swift 3 de l'une de mes applications.

/**
 * 
 * Convert unix time to human readable time. Return empty string if unixtime     
 * argument is 0. Note that EMPTY_STRING = ""
 *
 * @param unixdate the time in unix format, e.g. 1482505225
 * @param timezone the user's time zone, e.g. EST, PST
 * @return the date and time converted into human readable String format
 *
 **/

private func getDate(unixdate: Int, timezone: String) -> String {
    if unixdate == 0 {return EMPTY_STRING}
    let date = NSDate(timeIntervalSince1970: TimeInterval(unixdate))
    let dayTimePeriodFormatter = DateFormatter()
    dayTimePeriodFormatter.dateFormat = "MMM dd YYYY hh:mm a"
    dayTimePeriodFormatter.timeZone = NSTimeZone(name: timezone) as TimeZone!
    let dateString = dayTimePeriodFormatter.string(from: date as Date)
    return "Updated: \(dateString)"
}
5
zeeshan

Rapide:

extension Double {
    func getDateStringFromUnixTime(dateStyle: DateFormatter.Style, timeStyle: DateFormatter.Style) -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = dateStyle
        dateFormatter.timeStyle = timeStyle
        return dateFormatter.string(from: Date(timeIntervalSince1970: self))
    }
}
2
Juan Boero

Quoi qu'il en soit, la réponse de @Nate Cook est acceptée, mais j'aimerais l'améliorer avec un meilleur format de date.

avec Swift 2.2, je peux obtenir la date désirée formatée 

//TimeStamp
let timeInterval  = 1415639000.67457
print("time interval is \(timeInterval)")

//Convert to Date
let date = NSDate(timeIntervalSince1970: timeInterval)

//Date formatting
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd, MMMM yyyy HH:mm:a"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let dateString = dateFormatter.stringFromDate(date)
print("formatted date is =  \(dateString)")

le résultat est

intervalle de temps est 1415639000.67457 

la date formatée est = 10, novembre 2014 17 h 03: PM

1
swiftBoy

Pour moi: Conversion des horodatages provenant d'API en date valide:

`let date = NSDate.init(fromUnixTimestampNumber: timesTamp /* i.e 1547398524000 */) as Date?`
0
brahimm