2017-09-11 3 views
0

Je reçois une chaîne particulière du service Web qui est en fait une heure. Donc, je veux vérifier si la chaîne que je reçois du service Web est au format 24 heures. J'ai joint avec succès AM et PM avec ce code:Comment vérifier si la chaîne actuelle est au format 24 heures ou au format 12 heures dans swift3?

let dateAsString = "13:15" 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "HH:mm" 

    let date = dateFormatter.date(from: dateAsString) 
    dateFormatter.dateFormat = "h:mm a" 
    let Date12 = dateFormatter.string(from: date!) 
    print("12 hour formatted Date:",Date12) 

Mais je voudrais savoir si « 13:15 » est supérieur à « 12:00 » que cette fois-ci que je reçois de webservice.

Répondre

2

Il suffit de passer le format de la date de 12 heures et vérifier nil

let dateAsString = "13:15" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "hh:mm" 
let is24HourFormat = dateFormatter.date(from: dateAsString) == nil 
+0

Vous devez définir les paramètres régionaux sinon iOS écrasera vos paramètres 12/24! – Sulthan

1

Ce que vous avez fait est juste le formatage date belle chaîne lisible .. Mais ce que vous cherchez réellement pour se comparer entre les dates:

Voir exemple suivant pour comparer deux dates [Swift 3.1]

func compareDates() { 

    let date1 = Date() // now 
    let date2 = Date().addingTimeInterval(20) // now+20secodns 

    switch date1.compare(date2) // return ComparisonResult 
    { 
    case .orderedAscending: 
     print("date1 < date2") 

    case .orderedDescending: 
     print("date1 > date2") 

    case .orderedSame: 
     print("date1 == date2") 
    } 

} 

Et si vous voulez comparer seulement fois que vous avez déjà en format 24h et les chaînes, vous pouvez simplement utiliser la comparaison normale pour les chaînes, mais je ne recommande pas ce

/// compare only times in 24h format in strings 

func compareTimesInStrings() { 

    let time1 = "13:00" 
    let time2 = "09:05" 

    if time1 < time2 { 
     print("time1 < time2") 

    } else if time1 > time2 { 
     print("time1 > time2") 

    } else { 
     print("time1 == time2") 

    } 

} 
+1

N'utilisez pas 'date1.compare (date2)', vous pouvez simplement utiliser 'date1 Sulthan

0

Peut être est-ce une réponse longue . Mais voici l'autre façon:

let dateAsString = "13:15" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "HH:mm" 

if let date = dateFormatter.date(from: dateAsString) { 
    dateFormatter.dateFormat = "h:mm a" 
    let Date12 = dateFormatter.string(from: date) 
    let amRange = Date12.range(of: dateFormatter.amSymbol) 
    let pmRange = Date12.range(of: dateFormatter.pmSymbol) 

    if pmRange == nil { 
     print("12 hours") 
    } else if amRange == nil { 
     print("24 hours") 
    } 
} else { 
    print("not in the time range") // if dateAsString is > 23:59 
}