C'è un modo per rilevare se il dispositivo corrente dell'app utilizza 12 ore il nostro formato 24 ore, in modo da poter utilizzare un NSDateFormatter per 12 ore e uno per 24 ore a seconda della lingua degli utenti/impostazione loaction? Proprio come UIDatePicker rileva e mostra il selettore AM/PM se è in formato 12h.Rileva se il formato dell'ora è nel formato 12 ore o 24 ore
risposta
L'ho capito, è piuttosto facile. Ho appena aggiunto questo codice di 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"));
e restituisce perfettamente YES
o NO
a seconda del locale.
Grazie per la risposta. Mi aiuta molto. – Gypsa
Funziona solo se il calendario locale utilizza lo stesso formato del telefono, ma su iOS è possibile impostare in modo specifico il formato dell'ora che potrebbe renderlo diverso da quello utilizzato nel calendario locale. – yoeriboven
Ecco la versione 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)
}
Si sta utilizzando l'operatore ternario come NOT, che rende solo più difficile la lettura. La riga di restituzione dovrebbe essere questo 'return! (PmRange == nil && amRange == nil)' – EmilioPelaez
Ahh, certo, grazie :) L'ho modificato ora .. – Wiingaard
Ed ecco uno Swift 3.0 versione aggiornata
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)
}
questo è rapida soluzione che ha funzionato per me, quei due di cui sopra non ha fatto.
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 risposta più corretta credo –
Obiettivo categoria 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. Formato da 24 ore a formato 12 ore
- 2. php formato 12 ore in formato 24 ore conversione
- 3. Regex per 12 ore e il tempo 24 ore formato
- 4. Ora in NSDateComponent in formato 12 o 24 ore?
- 5. come convertire il formato di 24 ore TimeSpan in formato 12 ore TimeSpan?
- 6. Converti 12 ore in 24 ore
- 7. SimpleDateFormat.getTimeInstance ignora il formato 24 ore
- 8. Conversione formato datetime di 12 ore
- 9. Rileva se iPhone sta visualizzando l'ora in modalità 12 ore o 24 ore?
- 10. Conversione di un formato in formato 12 ore in SQL
- 11. Ora da DateTime? in formato 24 ore
- 12. Formato di convalida del formato di php 24 ore
- 13. Come visualizzare l'ora nel formato 12 ore in Objective-C?
- 14. Rileva con javascript se la macchina dell'utente utilizza 12 ore (am/pm) o 24 ore (ora militare)
- 15. Conversione del formato in formato 24 ore in Javascript
- 16. iphone: NSDateFormatter come mostrare l'ora nel formato 24 ore?
- 17. NSDateFormatter dateFromString e iPhone in Confusione formato 24 ore
- 18. Rileva impostazione ora 24 ore su iPhone
- 19. Imposta formato orologio a 24 ore in Jenkins
- 20. iOS: visualizza l'ora nel formato 24 ore se le impostazioni internazionali sono appropriate?
- 21. NSDateFormatter in modalità 12 ore
- 22. Modifica da 1-24 ore a 1-12 ore per il metodo "getHours()"
- 23. php stringa in un formato della data, aggiungere 12 ore
- 24. SimpleDateFormat restituisce la data di 24 ore: come ottenere la data di 12 ore?
- 25. Come si converte tra 12 ore e 24 ore in PHP?
- 26. Ho controllato se il formato dell'ora del telefono è impostato su 24 ore?
- 27. Tempo di visualizzazione in formato 12 ore in JavaScript
- 28. Ottieni solo l'ora del giorno da DateTime utilizzando il formato 12 o 24 ore come definito dalla cultura corrente
- 29. 24 ore dalla data di stringa
- 30. NSDateFormatter rileva il clock di 24 ore in OS X e iOS
già risposto [qui] (http://stackoverflow.com/q/1929958/154803) – progrmr
@progrmr che è sicuramente una buona soluzione per determinare se il clock a 24 ore è impostato o meno, ma dipende dal comportamento dei formattatori di data. L'OP voleva che queste informazioni formassero una stringa usando il formattatore della data in modo tale che la soluzione implicasse l'aggiunta di una categoria, la creazione di un formattatore di date, la conversione di una data in una stringa, la ricerca della stringa due volte per i simboli AM/PM, quindi la ramificazione del codice in formattare utilizzando il formato 12 ore o 24 ore quando lo fa già per te. – Joe
@Joe Lo so, ma a volte devi sapere per altri motivi, come mettere l'AM in un UILabel separato con un font diverso, l'OP non era chiaro esattamente perché volesse sapere. – progrmr