如何在iPhone模拟器中更改时间和时区?
如何更改iPhone模拟器中的时间和时区?
我猜它使用你的系统时区,所以在系统偏好设置中更改TZ可能会诀窍
更改系统date时间首选项后重新启动模拟器,您将看到反映的更改。 它为我工作。
如果苹果提供“模拟date”,他们提供了“模拟位置”菜单,这将是有用的。 我所做的是在获取date后立即设置一个断点(将其保存在variables中),然后修改该值。 或者只是修改我检查date变化的地点,并使其返回true。
我已经提出了一个自动的解决scheme来改变时间的问题,包括hacky方法swizzling: https ://stackoverflow.com/a/34793193/829338。 我认为,也应该相应地改变时区。
我需要自动testing我的应用程序,这需要更改系统时间。 我做了,汤姆build议:快乐的哈克方法调整。
为了说明的目的,我只改变[NSDate date]
但不是[NSDate dateWithTimeIntervalSince1970:]
。
首先,您需要创build用作新的[NSDatedate]的类方法。 我实现它只是将时间由一个固定的时间差异。
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]; }
到目前为止,非常容易。 有趣的来了。 我们从这两个类中获取方法,并交换实现(它在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);
在更改时区时,我发现最简单的方法是点击菜单栏中的时钟。 然后select“打开date和时间首选项”,然后select选项卡时区。
或者select系统首选项 – >date和时间,然后select时区选项卡。
只是一个人可能不知道他们的方式周围的OSX的指针。
这是一个古老的线程,但它是最接近我的问题。 我需要模拟欧洲的时区,这种方法适用于我。 转到'时区'点击,而不是'date和时间'点击。 取消选中“使用当前位置自动设置时区”框并滑动垂直矩形栏(上面带有蓝点)来模拟您的系统时间。