2013-08-08 17 views
7

Chcę ustawić strefę czasową systemu, datę w iOS według kodu. Pomagają mi jakieś pomysły lub prywatne apisy? Przykład: ustaw strefę czasową na GMT + 8, a datę na 10 sierpnia 2013 r. 20:30. Jak to zrobić? Dzięki!Jak ustawić strefę czasową systemu dla iOS według kodu?

+2

Nie można ustawić ustawień systemowych w aplikacji! (Może to być możliwe na urządzeniu zepsutym) – Groot

+1

Możesz użyć privis apis, aby to zrobić, ale to nie będzie akceptowane w sklepie z aplikacjami. Czy planujesz dystrybucję wewnętrzną? – cvsguimaraes

+0

Tak, myślę, że istnieje kilka prywatnych api, aby to zrobić, ale nie wiem, po prostu używa do testowania w domu! –

Odpowiedz

15

Jak mówili inni nie można edytować Strefa czasowa systemu z poziomu aplikacji, jednak możesz można ustawić ustawić domyślną strefę czasową dla całej aplikacji przy użyciu +setDefaultTimeZone: na NSTimeZone.

Wspomniałeś to było do testowania, więc mam zamiar założyć, to dla testów jednostkowych niektórych date zwyczaj formatek i taki, w którym to przypadku można zrobić coś takiego w badanej jednostki:

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 

Mam nadzieję, że to pomoże!

+4

Nawet jeśli nie jest to udokumentowane, można również uniknąć buforowania strefy czasowej, ponieważ '[NSTimeZone setDefaultTimezone: nil]' wystarczy, aby zresetować wartość 'defaultTimeZone' do oryginalnej wartości. – viteinfinite

+0

w Swift, możemy teraz użyć 'NSTimeZone.resetSystemTimeZone()' aby osiągnąć ten –

+1

@ ula-Bedlam za https://developer.apple.com/reference/foundation/nstimezone/1387189-resetsystemtimezone?language=objc wygląda 'resetSystemTimeZone' istnieje od iOS 2 i nie jest to tylko Swift. –

2

Jak @Filip powiedział w komentarzach, że nie można edytować preferencji systemowych w aplikacji. Co możesz zrobić (nie wiesz, czy będzie to dla ciebie przydatne) to strefa czasowa NSDates, z którymi pracujesz, w twojej aplikacji.

To przykład, jak to zrobić:

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]; 

Oto lista możliwych stref czasowych do stosowania z timeZoneWithName: `: http://pastebin.com/ibNU2RcG

+0

Dziękujemy za tę sugestię, ale w jaki sposób ustawić wewnątrz mojej aplikacji, a strefa czasowa i data zostaną ustawione dla wszystkich aplikacji w systemie iOS? –

+1

Cóż, jak już wcześniej powiedziałem, dla wszystkich systemów, wszystkich aplikacji itp. Wydaje się, że nie ma sposobu, aby to zrobić, przepraszam, możesz kontrolować tylko datę/strefę czasową swojej własnej aplikacji. –

Powiązane problemy