2013-08-08 8 views
7

Ich möchte die Systemzeitzone, Datum Zeit in iOS nach Code. Irgendwelche Ideen oder private apis helfen mir? Beispiel: Stellen Sie die Zeitzone auf GMT + 8 und die Uhrzeit auf den 10. August 2013 um 20:30 Uhr ein. Wie es geht? Vielen Dank!Wie stelle ich die Systemzeitzone für iOS nach Code ein?

+2

Sie können die Systemeinstellungen nicht innerhalb einer App festlegen! (Kann auf einem gefängnisgeschädigten Gerät möglich sein) – Groot

+1

Sie können privates apis verwenden, um dies zu tun, aber dies wird nicht im App Store akzeptiert. Sind Sie für den In-House-Vertrieb? – cvsguimaraes

+0

Ja, ich denke, es gibt einige private Apis, um es zu tun, aber ich weiß es nicht, es wird nur zum Testen inhouse verwendet! –

Antwort

15

Wie die anderen gesagt haben Sie können das nicht ändern System-Zeitzone aus einer App, aber Sie können eine Standardzeitzone für Ihre gesamte Anwendung mit +setDefaultTimeZone: auf NSTimeZone.

Sie erwähnt dies für die Prüfung war, so werde ich dies für Einheit ist anzunehmen, testen einige benutzerdefinierte Datum Formatierer und solche, in welchem ​​Fall Sie in Ihrem Gerät zu testen so etwas wie dies könnte:

static NSTimeZone *cachedTimeZone; 

@implementation DateUtilTests 

+ (void)setUp 
{ 
    [super setUp]; 
    cachedTimeZone = [NSTimeZone defaultTimeZone]; 
    // Set to whatever timezone you want your tests to run in 
    [NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; 
} 

+ (void)tearDown 
{ 
    [NSTimeZone setDefaultTimeZone:cachedTimeZone]; 
    [super tearDown]; 
} 

// ... do some tests ... 

@end 

Ich hoffe das hilft!

+4

Auch wenn dies nicht dokumentiert ist, können Sie auch das Zwischenspeichern der Zeitzone vermeiden, da '[NSTimeZone setDefaultTimezone: nil]' ausreicht, um 'defaultTimeZone' auf den ursprünglichen Wert zurückzusetzen. – viteinfinite

+0

In swift können wir jetzt 'NSTimeZone.resetSystemTimeZone()' verwenden, um dies zu erreichen –

+1

@ Bienenstock-Bedlam per https://developer.apple.com/reference/foundation/nstimezone/1387189-resetsystemtimezone?language=objc es aussieht 'resetSystemTimeZone' existiert seit iOS 2 und ist nicht nur Swift. –

2

Wie @Filip in Kommentaren gesagt, ist es nicht möglich, Systemeinstellungen in einer App zu bearbeiten. Was Sie tun könnten (Sie wissen nicht, ob es für Sie nützlich ist), ist die Zeitzone der NSDates, mit denen Sie arbeiten, in Ihrer APP.

Das ist ein Beispiel dafür, wie das zu tun:

NSString *dateString = @"2013-08-07 17:49:54"; 
NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Europe/London"]; //set here the timezone you want 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
[dateFormatter setTimeZone:timeZone]; 

NSDate *date = [dateFormatter dateFromString:dateString]; 

Hier ist eine Liste von möglichen Zeitzonen mit timeZoneWithName verwendet werden: `: http://pastebin.com/ibNU2RcG

+0

Vielen Dank für diesen Vorschlag, aber wie Sie in meiner App einstellen und dass Zeitzone und Datum für alle Apps in iOS festgelegt werden? –

+1

Nun, wie ich schon sagte, für alle Systeme, alle Apps, usw. scheint es, dass es keine Möglichkeit gibt, das zu tun, sorry, du kannst nur das Datum/die Zeitzone deiner eigenen App steuern. –

Verwandte Themen