ios - tengo - ¿Qué estoy haciendo mal con allowFractionalUnits en NSDateComponentsFormatter?
se lleno el almacenamiento del iphone (3)
En cuanto a la NSDateComponentsFormatter.allowsFractionalUnits , está utilizando muchos lenguajes interesantes (el énfasis es mío):
Las unidades fraccionarias se pueden usar cuando un valor no puede representarse exactamente usando las unidades disponibles. Por ejemplo, si no se permiten los minutos, el valor "1h 30m" se podría formatear como "1.5h".
Si bien para mí, parece que solo tendría sentido que los valores en la documentación sean valores que realmente funcionen, es ciertamente posible que exista una combinación de valor de tiempo, opciones de formateador y configuraciones de calendario / configuración regional que hagan que esto funcione. Definitivamente vale la pena presentar un Radar tanto en la funcionalidad como en la documentación.
Básicamente, lo que quiero es obtener el valor de un intervalo de tiempo representado en horas solamente, sin redondearlo a horas completas (usando NSDateComponentsFormatter para obtener el formato y la localización adecuados). No sé si entiendo mal el uso de NSDateComponentsFormatter.allowsFractionalUnits , pero no puedo obtener el formateador para que me dé un valor decimal. ¿Puede alguien ayudarme a detectar mi error o decirme de qué manera lo entiendo mal?
De la documentación de Apple sobre la propiedad allowFractionalUnits:
Las unidades fraccionarias se pueden usar cuando un valor no puede representarse exactamente usando las unidades disponibles. Por ejemplo, si no se permiten los minutos, el valor "1h 30m" se podría formatear como "1.5h".
Código de ejemplo 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"
Mismo ejemplo en el código de 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"
Actualización: he informado un error a Apple sobre este problema ( rdar://22660145 ).
Según Open Radar # 32024200 :
Después de realizar algunas excavaciones (desensamblar Foundation), parece que cada llamada a - [_ unitFormatter stringFromNumber:] en - [NSDateComponentsFormatter _stringFromDateComponents:] se pasa un + [NSNumber numberWithInteger:] que deja caer datos de punto flotante.
No estás haciendo nada malo. La bandera está simplemente rota.
ingrese el código aquí. Por lo que he entendido, usted desea mostrar la hora en formato de 12 horas, ¿verdad? A continuación se muestra el código: Swift->
let dateAsString = "20:30"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm"
let date = dateFormatter.dateFromString(dateAsString)
dateFormatter.dateFormat = "h:mm a"
let date12 = dateFormatter.stringFromDate(date!)
txtText.text = date12