2013-08-08 2 views
7

Я хочу установить системный часовой пояс, дату в iOS по коду. Любые идеи или частные апы помогают мне? Пример: Установите часовой пояс на GMT + 8 и дату до 10 августа 2013 года 20:30. Как это сделать? Благодаря!Как установить системный часовой пояс для iOS по коду?

+2

Вы не можете установить системные настройки из приложения! (Возможно, на устройстве, поврежденном в тюрьме) – Groot

+1

Вы можете использовать privates apis для этого, но это не будет принято в магазине приложений. Собираетесь ли вы для внутреннего распределения? – cvsguimaraes

+0

Да, я думаю, есть некоторые частные apis, чтобы сделать это, но я не знаю, Он просто использует для тестирования дома! –

ответ

15

Как уже говорили другие, вы не можете редактировать системный часовой пояс из приложения, однако вы можете установить часовой пояс по умолчанию для всего приложения, используя +setDefaultTimeZone: по адресу NSTimeZone.

Вы упомянули это для тестирования, так что я буду считать это для модульного тестирования некоторых пользовательской даты форматтеров и такой, в этом случае вы могли бы сделать что-то подобное в тестовом модуле:

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 

Надеюсь, что это поможет!

+4

Даже если это не задокументировано, вы также можете избежать кеширования часового пояса, поскольку '[NSTimeZone setDefaultTimezone: nil]' достаточно для сброса 'defaultTimeZone' к исходному значению. – viteinfinite

+0

В быстром режиме мы можем использовать 'NSTimeZone.resetSystemTimeZone()' для достижения этого –

+1

@ beehive-bedlam per https://developer.apple.com/reference/foundation/nstimezone/1387189-resetsystemtimezone?language=objc это похоже на 'resetSystemTimeZone' существует с iOS 2 и это не только Swift. –

2

Как @Filip сказал в комментариях, это невозможно изменить системные настройки внутри приложения. То, что вы можете сделать (не знаю, будет ли оно полезно для вас), задает часовой пояс NSDates, с которым вы работаете, внутри вашего APP.

Это пример того, как сделать это:

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

Вот список возможных часовых поясов, которые будут использоваться с timeZoneWithName: `: http://pastebin.com/ibNU2RcG

+0

Благодарим вас за это предложение, но как установить внутри моего приложения, и этот часовой пояс и дата будут установлены для всех приложений в iOS? –

+1

Ну, как я уже говорил, для всей системы, для всех приложений и т. Д., Кажется, что нет никакого способа сделать это, извините, вы можете контролировать дату и время своего приложения. –

Смежные вопросы