Как изменить время и часовой пояс в iPhone simulator?



Как изменить время и часовой пояс в iPhone симулятор?

969   7  

7 ответов:

Я предполагаю, что он использует ваш системный часовой пояс, поэтому изменение TZ в Системных настройках, вероятно, сделает трюк

Screenshot for description

перезагрузите симулятор после изменения системных настроек даты и времени, и вы увидите отраженные изменения. Это сработало для меня.

было бы полезно, если бы Apple предоставила "имитировать дату", поскольку они предоставили меню "имитировать местоположение". Я устанавливаю точку останова сразу после получения даты (сохраняя ее в переменной), а затем изменяю значение. Или просто измените место, где я проверяю изменение даты, и верните его в true.

при смене часового пояса, я нашел самый простой способ сделать это, нажав на часы в меню. А затем выберите "Открыть настройки даты и времени", затем выберите вкладку часовой пояс.

альтернативно Системные настройки -> дата и время и выберите вкладку часовой пояс.

просто указатель для тех, кто не может знать свой путь вокруг OSX.

Это старый поток, но он ближе всего к моему вопросу. Мне нужно смоделировать часовой пояс для Европы, этот метод работает для меня. Перейти к "часовой пояс" нажмите вместо "дата и время" нажмите. Снимите флажок "установить часовой пояс автоматически с помощью текущего местоположения" и сдвиньте вертикальную прямоугольную полосу (с синей точкой на ней), чтобы имитировать системное время.

enter image description here

я предложил автоматическое решение проблемы изменения времени, которое включает в себя hacky метод swizzling:https://stackoverflow.com/a/34793193/829338. я предполагаю, что это также должно работать для изменения часового пояса соответственно.


мне нужно было проверить мое приложение автоматически, что потребовало изменения времени sys. Я сделал то, что предложил том: счастливый хакерский метод выпивки.

в демонстративных целях, я только изменить [NSDate date] но не [NSDate dateWithTimeIntervalSince1970:].

сначала вам нужно создать свой метод класса, который служит в качестве нового [nsdate date]. Я реализовал его, чтобы просто сдвинуть время на постоянную временную разницу.

int timeDifference = 60*60*24; //shift by one day
NSDate* (* original)(Class,SEL) = nil;

+(NSDate*)date{
    NSDate* date = original([NSDate class], @selector(date));
    return [date dateByAddingTimeInterval:timeDifference];
}

до сих пор, довольно легко. А теперь самое интересное. Мы получаем методы из обоих классов и реализации exchange (он работал для меня в AppDelegate, но не в моем классе UITests). Для этого вам нужно будет импортировать objc/runtime.h.

Method originalMethod = class_getClassMethod([NSDate class], @selector(date));
Method newMethod = class_getClassMethod([self class], @selector(date));

//save the implementation of NSDate to use it later
original  = (NSDate* (*)(Class,SEL)) [NSDate methodForSelector:@selector(date)];

//happy swapping
method_exchangeImplementations(originalMethod, newMethod);

мой сервер сборки-UTC, и некоторые из моих модульных тестов требовали, чтобы часовой пояс был PST. Используя категорию В NSTimeZone, вы можете переопределить реализацию Apple для использования вашего кода. Работает только для swift проектов тоже.

//NSTimeZone+DefaultTimeZone.h
#import <Foundation/Foundation.h>

@interface NSTimeZone (DefaultTimeZone)

+(NSTimeZone *)defaultTimeZone;

@end

//NSTimeZone+DefaultTimeZone.m
#import "NSTimeZone+DefaultTimeZone.h"

@implementation NSTimeZone (DefaultTimeZone)

+(NSTimeZone *)defaultTimeZone
{
    return [NSTimeZone timeZoneWithName:@"America/Los_Angeles"];
}

@end

Comments

    Ничего не найдено.