Fondamentalement ce que je veux est d'obtenir la valeur d'un intervalle de temps représenté en heures seulement, sans l'arrondir à des heures complètes (en utilisant NSDateComponentsFormatter pour le faire correctement formaté et localisé). Je ne sais pas si j'ai mal compris l'utilisation de NSDateComponentsFormatter.allowsFractionalUnits, mais je ne peux pas obtenir le formatter pour me donner une valeur décimale. Quelqu'un peut-il m'aider à repérer mon erreur ou me dire de quelle manière je me méprends?Qu'est-ce que je fais de mal avec allowFractionalUnits sur NSDateComponentsFormatter?
A partir de documents d'Apple sur allowsFractionalUnits propriété:
Les fractions de part peuvent être utilisées lorsqu'une valeur ne peut pas être exactement représentés en utilisant les unités disponibles. Par exemple, si les minutes ne sont pas autorisées, la valeur "1h 30m" peut être formatée comme "1.5h".
exemple de code Swift:
let formatter = NSDateComponentsFormatter()
formatter.unitsStyle = .Abbreviated
formatter.allowedUnits = .Hour
formatter.allowsFractionalUnits = true
let onePointFiveHoursInSeconds = NSTimeInterval(1.5 * 60.0 * 60.0)
print(formatter.stringFromTimeInterval(onePointFiveHoursInSeconds)!)
//"1h" instead of expected "1.5h"
Même exemple dans le code Objective-C:
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated;
formatter.allowedUnits = NSCalendarUnitHour;
formatter.allowsFractionalUnits = YES;
NSTimeInterval onePointFiveHoursInSeconds = 1.5 * 60.0 * 60.0;
NSLog(@"%@", [formatter stringFromTimeInterval:onePointFiveHoursInSeconds]);
//"1h" instead of expected "1.5h"
Mise à jour: J'ai signalé un bug à Apple à propos de ce problème (rdar://22660145).
Problème intéressant. Il semble que allowsFractionalUnits ne fonctionne pas du tout. –
Je pense que c'est fondamentalement une mauvaise idée. Par exemple, 1.33h, combien ça coûte? Cela pourrait être trompeur dans le cas où il est formaté pour l'utilisateur final. Je préfère afficher 1:20 – Prcela
@Prcela: Ceci est mon exemple simplifié, ma motivation pour l'utiliser est un peu hors de propos ici. Comme il est documenté que NSDateComponentsFormatter est supposé supporter ceci, il devrait être possible d'obtenir cette sortie. – osanoj