NSLocale ist meist leer - wo sind die Attribute?
-
22-07-2019 - |
Frage
Ich mag wirklich nur wissen, ob der Benutzer das iPhone bis 12 Stunden-Modus für die Zeitanzeige eingestellt hat.
Die NSLocale
Klasse schien (in vagen unspezifische Begriffen ohne Beispiele oder scheinbar nützliche Methoden) zu beschreiben, was ich war nach.
So habe ich einige NSLocale
Objekte erstellt wie folgt:
NSLocale *systemLocaleApparently = [NSLocale systemLocale];
NSLocale *currentLocaleWithLotsOfGoodies = [NSLocale autoupdatingCurrentLocale];
Wenn ich diese Objekte mit dem Debugger oder NSLog()
inspizieren, kann das Beste, was ich bekommen, ist etwas in dieser Richtung:
<CFLocale 0x1278e0 [0x382084f8]>{type = system, identifier = ''}
Die aktuelle locale hat einen ID-String drin, aber sonst nichts.
Aus der Dokumentation kann ich Werte aus der Lokalisierungs-Lookup, und eine davon ist ein NSCalendar
Objekt. So bekomme ich das zurück und haben einen Blick auf sie, und es sagt mir, es ist „gregorianischen“.
All das ist offenbar von Nutzen jemand ... aber was würde ich wirklich gerne ein schönes großes Wörterbuch der Attribute all aktuellen Systemeigenschaften zeigen, vor allem so, dass mein NSDateFormatters
nicht halte Sprengung, wenn ein Benutzer wählt 12 Stunden-Format, obwohl ich die Formatierer gezwungen en_US_POSIX
locale und ein festes setDate
Format zu verwenden.
(Ich bin sicher, NSCalendarDate
nie benutzt, diese Probleme zu haben ...)
Hoffentlich ich etwas offensichtlich fehle (und wahrscheinlich peinlich) offensichtlich, aber vielleicht jemand Art es mit mir teilen würde. Bitte:)
Lösung
Hier ist eine Möglichkeit zu sagen, wenn der Benutzer seines Zeitformat auf ein 12- oder 24-Stunden-Format eingestellt hat:
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
// Look for H (24-hour format) vs. h (12-hour format) in the date format.
NSString* dateFormat = [formatter dateFormat];
BOOL using24HourClock = [dateFormat rangeOfString:@"h"].location == NSNotFound;