Ich muss einen Timer im "hh: mm: ss" -Format auf dem iPhone anzeigen, möchte ihn jedoch lokalisieren. In Finnland wird beispielsweise ein Punkt anstelle eines Doppelpunkts zwischen den Zeitkomponenten (hh.mm.ss) verwendet. Apples NSDateFormatter würde den Trick machen, wenn ich mit einer "Zeit" beschäftigt wäre, aber ich muss Stunden viel mehr als 24 anzeigen.
Ich konnte nicht einen NSDate / NSDateFormatter arbeiten, weil, wenn Sie einen mit Sekunden machen ...
%Vor%... alle 86.400 Sekunden (ein Tag) NSDate erhöht automatisch den Tag und Stunden, Minuten und Sekunden gehen auf Null zurück. Ich muss es mit einer beliebigen Anzahl von Sekunden arbeiten lassen, ohne es zu überrollen. Zum Beispiel möchte ich mit 86,401 Sekunden 24:00:01 (oder 24,00.01 in Finnland) anzeigen.
Mein Code verwaltet die gesamten Sekunden in Ordnung. Das einzige Problem, das ich habe, ist das Display. Ein einfaches ...
%Vor%... würde funktionieren, wenn ich einen Weg finden könnte, um zu einem lokalisierten "sepString" zu kommen (dem Zeitkomponententrenner). NSLocale scheint das nicht zu haben.
Gedanken?
Hier ist ein zugegebenermaßen hackischer Weg, um den Zeitkomponenten-Separator für jedes Gebietsschema zu erhalten. Es sollte auf iOS 3.2 und höher funktionieren. Ich weiß, dass der Code prägnanter sein kann, aber ich habe mein Flag "Maximum-Ausführlichkeit" aktiviert, um es so gut wie möglich lesbar zu machen.
%Vor%Hier finden Sie Informationen zu diesem Thema für andere, die möglicherweise herausfinden möchten, welchen Charakter verschiedene Bereiche der Welt verwenden, um Zeitkomponenten zu trennen. Ich habe alle "Region Format" -Einstellungen auf meinem iPhone - iOS Version 4.1 (8B117) durchgegangen und ich habe festgestellt, dass alle bis auf sieben Regionen einen Doppelpunkt (hh: mm) verwenden. Hier sind die anderen (ihr NSLocaleCountryCode ist in geschweiften Klammern).
• Dänisch (Dänemark) {DK}
• Finnisch (Finnland) {FI}
• Serbisches Montenegro (kyrillisch) {MICH}
• Serbisches Montenegro (Latein) {ME}
• Serbisch (kyrillisch) {RS}
• Serbisch (Latein) {RS}
• Marathi (Indien) {IN}
Beachten Sie, dass Indien (nicht Marathi-Indien) auch den Ländercode IN hat und einen Doppelpunkt verwendet. Wenn Sie also nur den Ländercode überprüfen, müssen Sie sich andere NSLocale-Felder ansehen. Ich bin noch nicht durch alle Felder gegangen, aber ich vermute, dass NSLocaleScriptCode oder NSLocaleVariantCode sie unterscheiden können. Diese Komplexität ist der Grund, warum Apple uns diesen Charakter im SDK zugänglich machen sollte. Ich habe es in Radar angemeldet, also wenn Sie einverstanden sind, fordern Sie es bitte auch an, die Anzahl der Anfragen ist sehr wichtig für das, was sie tun wollen.
In iOS8 und neuer können Sie DateComponentsFormatter verwenden. Unten ist ein Swift 3 Beispiel.
%Vor%