如何在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和时间'点击。 取消选中“使用当前位置自动设置时区”框并滑动垂直矩形栏(上面带有蓝点)来模拟您的系统时间。

在这里输入图像说明