reloj quitar illuminator horas hora formato fecha convertir como casio cambiar a168 objective-c ios cocoa-touch nstimezone

objective-c - quitar - formato de 24 horas en excel



Detecta si el formato de tiempo está en formato de 12 horas o 24 horas (5)

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) }

¿Hay alguna manera de detectar si el dispositivo actual de la aplicación usa 12h nuestro formato de 24 horas, de modo que pueda usar un NSDateFormatter durante 12 horas y una durante 24 horas, dependiendo de la configuración de idioma / ubicación del usuario? Justo como UIDatePicker detecta y muestra el selector AM / PM si es formato 12h.


Categoría del 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


Y aquí hay una versión actualizada de 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) }


esta es una solución rápida que funcionó 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 }


Lo descubrí, es bastante fácil. Acabo de agregar 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 devuelve YES o NO perfectamente dependiendo de la configuración regional.