¿Hay alguna manera de detectar si el dispositivo actual utiliza 12 horas nuestro formato de 24 horas, de modo que puedo usar un NSDateFormatter para 12 horas y una para 24 horas dependiendo del idioma del usuario/configuración de ubicación? Justo como UIDatePicker detecta y muestra el selector AM/PM si es formato 12h.Detecta si el formato de hora está en formato de 12 horas o 24 horas
Respuesta
Me di cuenta, es bastante fácil. Acabo de añadir este código a viewDidLoad
:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
[formatter release];
NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));
Y es perfectamente retornos YES
o NO
dependiendo de la configuración regional.
Gracias por su respuesta. Me ayuda mucho. – Gypsa
Esto solo funciona si el calendario local usa el mismo formato que el teléfono, pero en iOS puede establecer específicamente el formato de tiempo que podría hacerlo diferente de lo que se usa en el calendario local. – yoeriboven
Aquí está la versión Swift:
func using12hClockFormat() -> Bool {
let formatter = NSDateFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.dateStyle = NSDateFormatterStyle.NoStyle
formatter.timeStyle = NSDateFormatterStyle.ShortStyle
let dateString = formatter.stringFromDate(NSDate())
let amRange = dateString.rangeOfString(formatter.AMSymbol)
let pmRange = dateString.rangeOfString(formatter.PMSymbol)
return !(pmRange == nil && amRange == nil)
}
Está utilizando el operador ternario como NOT, lo que hace que sea más difícil de leer. La línea de retorno debería ser 'return! (PmRange == nil && amRange == nil)' – EmilioPelaez
Ahh, claro, gracias :) He editado eso ahora .. – Wiingaard
Y aquí es una versión actualizada Swift 3.0
func using12hClockFormat() -> Bool {
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.dateStyle = .none
formatter.timeStyle = .short
let dateString = formatter.string(from: Date())
let amRange = dateString.range(of: formatter.amSymbol)
let pmRange = dateString.range(of: formatter.pmSymbol)
return !(pmRange == nil && amRange == nil)
}
esto es rápida solución que trabajó para mí, los dos anteriores no lo hicieron.
let dateString : String = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
if(dateString.contains("a")){
// 12 h format
return true
}else{
// 24 h format
return false
}
La mayoría de las respuestas correctas creo –
categoría Objetivo C NSDate+Extensions
:
@import Foundation;
@interface NSDate (Extensions)
- (NSString *)getTimeString;
@end
#import "NSDate+Extensions.h"
@implementation NSDate (Extensions)
- (NSString *)getTimeString
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
if ([self isTwelveHourDateFormat]) {
[formatter setDateFormat:@"hh:mm\ndd MMM"];
}
else {
[formatter setDateFormat:@"HH:mm\ndd MMM"];
}
return [formatter stringFromDate:self];
}
- (BOOL)isTwelveHourDateFormat
{
NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
return [dateFormat containsString:@"a"];
}
@end
- 1. Convertir formato de 12 horas a 24 horas en Ruby
- 2. ¿Detecta si el iPhone muestra la hora en el modo de 12 horas o 24 horas?
- 3. ¿Cómo convertir el tiempo del formato de 24 horas al formato de 12 horas usando javascript?
- 4. ¿Cómo puedo determinar si un dispositivo está usando el formato de 12 o 24 horas?
- 5. cómo convertir formato de 24 horas TimeSpan a formato de 12 horas TimeSpan?
- 6. Convertir 12 horas a 24 horas
- 7. ¿Cómo puedo determinar si el iPhone está configurado para visualización de 12 horas o 24 horas?
- 8. conversión de formato de fecha y hora a 12 horas
- 9. Convertir el formato de hora a 24 horas en Javascript
- 10. jquery datetimepicker formato de hora de 24 horas
- 11. Php validating formato de hora de 24 horas
- 12. Conversión de 12 horas a 24 horas en java
- 13. iOS: ¿Muestra la hora en formato de 24 horas si la configuración regional es adecuada?
- 14. Conversión de tiempo de 24 horas a 12 horas
- 15. Buscar si el usuario prefiere reloj de 12/24 horas?
- 16. NSDateFormatter dateFromString y iPhone en formato de 24 horas Confusión
- 17. NSDateFormatter en el modo de 12 horas
- 18. Cómo convertir cadena de tiempo de 24 horas en formato de cadena de tiempo de 12 horas
- 19. Conversión de una hora en formato de 12 horas en SQL
- 20. ¿Cómo se convierte el tiempo de 12 horas en el tiempo de reloj de 24 horas en PHP?
- 21. ¿Cómo se convierte entre 12 horas de tiempo y 24 horas de PHP?
- 22. Detectar configuración de 24 horas de iPhone
- 23. DateTime Formato como HH: mm 24 Horas sin AM/PM
- 24. ¿Cómo verifico si el sistema es de 12 o 24 horas?
- 25. ¿Cómo mostrar la hora en formato de 12 horas en Objective-C?
- 26. formato de hora de 24 horas (por lo que no AM a PM) para fullCalendar
- 27. Expresión regular para el tiempo de coincidencia en formato militar (24 horas)
- 28. ¿Cómo formatear DateTime a 24 horas?
- 29. ¿Cómo determinar si la cultura/lugar actual usa am/pm o la hora de 24 horas?
- 30. Estricto tiempo de 24 horas en JFormattedTextField
ya ha respondido [aquí] (http://stackoverflow.com/q/1929958/154803) – progrmr
@progrmr que es definitivamente una una buena solución para determinar si el reloj de 24 horas está configurado o no, pero depende del comportamiento de los Formateadores de fecha. El OP quería que esta información formateara una cadena usando el formateador de fechas para que la solución implique agregar una categoría de clase, crear un formateador de fechas, convertir una fecha en una cadena, buscar la cadena dos veces para símbolos AM/PM y luego ramificar su código formatee con formato de 12 horas o de 24 horas cuando ya lo haga por usted. – Joe
@Joe Lo sé, pero a veces necesitas saber por otros motivos, como poner el "AM" en una UILabel separada con una fuente diferente, el OP no estaba claro exactamente por qué quería saberlo. – progrmr