2009-11-09 1003 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