2009-11-09 197 views
90

如何更改iPhone模拟器中的时间和时区?如何在iPhone模拟器中更改时间和时区?

+0

改变系统时间和日期是没有解决方案。这会影响包括xcode时间戳在内的所有Mac应用程序。正确的行为是,模拟器位置的任何更改都必须更改时间和时区。所有其他的事情只是解决方法。希望苹果能够尽快解决这个问题 – Rudi 2015-09-02 11:09:48

回答

141

我猜测它使用你的系统时区,所以改变系统偏好设置TZ可能会做的伎俩

Screenshot for description

+0

嗯......我的模拟器上没有这个选项。在我的手机上,它位于设置 - >常规 - >日期和时间。在我的模拟器上,日期和时间部分不存在。 – 2012-07-23 21:37:30

+5

哦...请在您的机器的系统偏好设置中进行更改,而不是模拟器的设置。对。这工作! – 2012-07-23 21:43:00

+2

在这个问题中,模拟器时间在2个改变系统时间之后更新。任何改变模拟器时间的方法...... – AsifHabib 2013-03-07 06:58:30

21

重启更改系统日期时间的偏好,你将看到后模拟器反映的变化。它为我工作。

+93

可怕的解决方案(在苹果的部分,而不是你的答案)。这正是模拟器应该能够做的事情,作为一种安全的替代方案,以实际改变系统时间并可能破坏计算机上的事物。 – devios1 2013-07-05 18:05:59

+3

@devios这是比以往更真实手表 – Lewis42 2015-03-02 11:23:44

+0

@ Lewis42,你是什么意思? – 2015-04-15 13:09:14

1

更改时区时,我发现最简单的方法是单击菜单栏中的时钟。然后选择“打开日期&时间首选项”,然后选择标签时区。

或者选择系统首选项 - >日期和时间,然后选择选项卡时区。

只是一个可能不知道他们在OSX附近的人的指针。

+3

这不是一个答案,所以它应该是一个评论。不知道解决OS X问题的iOS开发人员数量是零。 – phatmann 2016-06-24 18:06:57

18

如果Apple在提供“模拟位置”菜单时提供了“模拟日期”,这将会很有用。我所做的是在获取日期后立即设置断点(将其保存在变量中),然后修改该值。或者只是修改我检查日期变更的地点,并使其返回true。

1

这是一个古老的线程,但它是最接近我的问题。我需要模拟欧洲的时区,这种方法适用于我。进入'TimeZone'点击,而不是'Date &'点击。取消选中'使用当前位置自动设置时区'框并滑动垂直矩形栏(其上带有蓝点)以模拟您的系统时间。

enter image description here

2

我提出一种自动溶液不断变化,其包括哈克方法混写的时间的问题:https://stackoverflow.com/a/34793193/829338。我认为这也应该相应地改变时区。


我需要自动测试我的应用程序,这需要更改系统时间。我做了,汤姆建议:快乐的哈克方法搅拌。

为了说明的目的,我只更改了[NSDate date]而不是[NSDate dateWithTimeIntervalSince1970:]

首先您需要创建用作新[NSDate日期]的类方法。我实现它只是通过一个固定的时间差来改变时间。

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); 
+0

IIRC这不适用于测试本地通知。 – 2017-06-21 16:48:52