IPhone सिम्युलेटर में समय और समयक्षेत्र कैसे बदलें?


144

मैं iPhone सिम्युलेटर में समय और समय क्षेत्र कैसे बदल सकता हूं ?


सिस्टम समय और दिनांक बदलने के लिए कोई समाधान नहीं है। जो कि सभी मैक अनुप्रयोगों को प्रभावित करता है जिसमें xcode time टिकटें भी शामिल हैं। सही व्यवहार यह है कि सिम्युलेटर स्थान के किसी भी परिवर्तन को समय और समय क्षेत्र बदलना होगा। अन्य सभी चीजें केवल वर्कअराउंड हैं। आशा है कि Apple इस asap को ठीक करेगा
रुडी

जवाबों:


214

मैं अनुमान लगा रहा हूं कि यह आपके सिस्टम टाइमजोन का उपयोग करता है, इसलिए सिस्टम प्रेफरेंस में टीबी को बदलना शायद चाल चलेगा

विवरण के लिए स्क्रीनशॉट


1
हम्म ... मेरे पास मेरे सिम्युलेटर पर यह विकल्प नहीं है। मेरे फ़ोन पर यह सेटिंग -> सामान्य -> ​​दिनांक और समय के अंतर्गत है। मेरे सिम्युलेटर पर, दिनांक और समय अनुभाग मौजूद नहीं है।
वीटो एंडोलिनी

6
ओह ... इसे अपनी मशीन की सिस्टम प्राथमिकताओं में बदलें, न कि सिम्युलेटर की सेटिंग में। सही। वह काम किया!
वीटो एंडोलिनी

2
इसमें एक समस्या, सिम्युलेटर समय को सिस्टम समय बदलने के 2 मिनट के बाद अपडेट किया जाता है। कोई भी विधि जो सिम्युलेटर समय को एक साथ बदल देती है ....
आसिफ हबीब

1
मैंने मैक का समय बदल दिया और सिम्युलेटर का समय नहीं बदला, मैं जाँच कर रहा था कि मैंने सही कदम उठाए, सिम्युलेटर का समय बदल गया। इसलिए मैंने निष्कर्ष निकाला कि सिम्युलेटर समय 10 से 15 सेकंड के बाद अपडेट किया जाता है, लेकिन यह मेरे लिए ठीक है। @JPK मुझे आपके सिस्टम की समस्या का पता नहीं है, सबसे अच्छा तरीका है कि आप पूरे टाइम लॉग को प्रिंट करें और जांच करें कि समस्या कहां है।
आसिफ हबीब

2
मैक का सिस्टम समय बदलें, फिर आप सिम्युलेटर को पुनरारंभ करें।
जॉन वॉन्ग

41

सिस्टम दिनांक समय वरीयताओं को बदलने के बाद सिम्युलेटर को फिर से शुरू करें और आप उन परिवर्तनों को परिलक्षित देखेंगे। इसने मेरे लिए काम किया।


171
भयानक समाधान (एप्पल के हिस्से पर, आपका जवाब नहीं)। यह बिल्कुल वैसा ही है जैसा कि सिम्युलेटर को आपके सिस्टम के समय को बदलने और आपके कंप्यूटर पर संभावित रूप से टूटने वाली चीजों को सुरक्षित विकल्प के रूप में करने में सक्षम होना चाहिए।
devios1

3
@devios यह l वॉच
lewis

@ लुईस 42, आपका क्या मतलब है?
इयूलियन ओनोफ्रेई

2
@ लुलियन सिर्फ इतना है कि समय बताने के लिए एक नया उपकरण है, लेकिन टाइमज़ोन का परीक्षण करने के लिए आपको अभी भी इस तरह गड़बड़ करना होगा। यह एक दूर की टिप्पणी थी, मैं निराश हो रहा था! :)
lewis

बहुत सच, @ लुईस 42। अपने फोन पर सिस्टम के समय के साथ खिलवाड़ करना वास्तव में आपके Apple वॉच पर आंदोलन डेटा जैसी चीज़ों को खराब कर देता है। यदि आप अपनी घड़ी के डेटा के बारे में परवाह करते हैं, तो समस्याग्रस्त परीक्षण करता है।
जेम्स व्हाइट

35

यह उपयोगी होगा यदि Apple ने "Simulate date" प्रदान की क्योंकि वे "Simulate Location" मेनू प्रदान करते थे। मैं क्या कर रहा हूँ एक ब्रेकपॉइंट सेट करने के तुरंत बाद दिनांक (एक चर में बचत) और फिर मूल्य को संशोधित करें। या बस उस स्थान को संशोधित करें जहां मैं तिथि परिवर्तन के लिए जांच करता हूं और इसे वापस लौटाता हूं।


इसे बेहतर उत्तर देने के लिए: आप इसे कैसे संशोधित करते हैं? आप इसमें एक अंतराल जोड़ते हैं? क्या आप कुछ कोड साझा कर सकते हैं?
हनी

आप इसे अभी कर सकते हैं, यहां stackoverflow.com/a/62155632/2025766 आप इसे कैसे कर सकते हैं
Fede Henze

10

स्क्रीनशॉट लेने के उद्देश्य से, Apple ने आखिरकार simctl टूल का उपयोग करके iOS सिम्युलेटर ( Xcode 11 के बाद से ) की स्थिति पट्टी पर समय को ओवरराइड करना संभव बना दिया है :

xcrun simctl status_bar "iPhone Xs" override --time "21:08"

5
मुझे लगता है कि यह केवल स्थिति पट्टी (स्क्रीनशॉट के उद्देश्य के लिए) को ओवरराइड करता है। लेकिन यह समय / दिनांक API के परिणाम को प्रभावित नहीं करेगा।
राऊंड

8

यहाँ iOS 13 और Xcode 11 से कम से कम एक समाधान उपलब्ध है। (पिछले संस्करणों के साथ परीक्षण नहीं किया था)

डिफ़ॉल्ट रूप से iOS सिम्युलेटर आपके मैक पर जो भी समय है, दिखाता है, हालाँकि, आप Xcode की कमांड लाइन का उपयोग टर्मिनल में इस कमांड के साथ ओवरराइड करने के लिए कर सकते हैं:

xcrun simctl status_bar "iPhone 11 Pro Max" override --time '9:41'

सिम्युलेटर नाम को उस डिवाइस से बदलें, जिसे आप बदलना चाहते हैं।

iPhone समय का स्क्रीनशॉट

स्टेटस बार के लिए आपके पास यह ओवरराइड है:

You may specify any combination of these flags (at least one is required):

--time <string>
     Set the date or time to a fixed value.
     If the string is a valid ISO date string it will also set the date on relevant devices.
--dataNetwork <dataNetworkType>
     If specified must be one of 'wifi', '3g', '4g', 'lte', 'lte-a', or 'lte+'.
--wifiMode <mode>
     If specified must be one of 'searching', 'failed', or 'active'.
--wifiBars <int>
     If specified must be 0-3.
--cellularMode <mode>
     If specified must be one of 'notSupported', 'searching', 'failed', or 'active'.
--cellularBars <int>
     If specified must be 0-4.
--batteryState <state>
     If specified must be one of 'charging', 'charged', or 'discharging'.
--batteryLevel <int>
     If specified must be 0-100.

समय कोई भी हो सकता है। लेकिन अगर आप चाहते हैं कि डिवाइस आपको तारीख दिखाने के लिए आईएसओ प्रारूप का उपयोग करे । उदाहरण के लिए एक वैध आईएसओ तिथि स्ट्रिंग '2007-01-09T10: 41: 00 + 01: 00' होगी।

अन्यथा आप समय पैरामीटर को एक स्ट्रिंग के रूप में उपयोग कर सकते हैं और इसमें जो भी आप पास करते हैं वह प्रदर्शित होगा।

पॉल हडसन द्वारा मूल पोस्ट के लिए धन्यवाद के साथ यहाँ लिंक है !


1
बहुत अच्छी संभावना है, लेकिन एक अलग टाइमज़ोन में ऐप की कार्यक्षमता का परीक्षण करने के लिए वास्तव में टाइमज़ोन को बदलने की अनुमति नहीं देता है। उदाहरण के लिए xcrun simctl status_bar का उपयोग करते समय "iPad Pro (11-इंच)" ओवरराइड - टाइम '2020-01-12T10: 41: 00-06: 00' यह उस समय को मेरे वर्तमान सीईटी टाइमज़ोन में परिवर्तित करता है और iOS सिम्युलेटर समय को 5 पर सेट करता है : 41pm
randomcontrol

1
स्पष्टीकरण के लिए: यदि कोई उपयोग किसी भिन्न समयक्षेत्र में करता है, तो मैं परीक्षण करना चाहूंगा कि मेरा ऐप कैसे प्रतिक्रिया करता है।
रैंडम कंट्रोल्स

आप सही कह रहे हैं, यह केवल स्टेटस बार को प्रभावित करता है, मैंने अभी स्क्रीन पर वर्तमान समय की छपाई का परीक्षण किया था और इसने नकली डिवाइस के सिस्टम समय को केवल शीर्ष पर डिस्प्ले में नहीं बदला। मैंने अपनी पोस्ट को दर्शाया है कि इसे प्रतिबिंबित करें। धन्यवाद
multitudes

6

आप TZउस एप्लिकेशन के लिए समय क्षेत्र निर्धारित करने के लिए Xcode स्कीम में पर्यावरण चर सेट कर सकते हैं ।

योजनाओं का प्रबंधन करें

आप उपयोग कर सकते हैं UTC, PST, EST, साथ ही इस तरह के रूप को स्थान-आधारित समय क्षेत्र नामों के रूप में America/Los_Angeles। यह अच्छी तरह से प्रलेखित नहीं है, लेकिन मुझे संदेह है कि किसी भी समय क्षेत्र का नाम काम करना चाहिए।

यह अच्छी तरह से प्रलेखित नहीं है, लेकिन स्रोत डेवलपर मंचों पर एक Apple डेवलपर समर्थन प्रतिनिधि है


3
यह नीचे मतदान क्यों है? यह एकमात्र ऐसी चीज थी जो वास्तव में मेरे लिए काम करती थी।
जैकब रोहड़े

1
यह वास्तव में साफ समाधान है। यदि आप कई अलग-अलग समय क्षेत्रों का परीक्षण करना चाहते हैं तो यह बहुत अच्छा है: प्रत्येक के लिए एक टीबी सेटिंग जोड़ें, लेकिन एक समय में केवल एक का चयन करना याद रखें। मैंने सिर्फ अमेरिका / शिकागो, यूरोप / इस्तांबुल, एशिया / Hong_Kong, और प्रशांत / होनोलुलू को एक वर्गीकरण प्राप्त करने के लिए जोड़ा ताकि मैं एक समय-निर्भर बग को ट्रैक कर सकूं। यदि आपको स्क्रीनशॉट कैप्चर करने या कई ऐप्स के साथ काम करने की आवश्यकता नहीं है, तो यह काम नहीं करेगा, लेकिन किसी एक ऐप को टेस्ट करने के लिए कई टाइमज़ोन के बीच स्विच करना बहुत तेज़ तरीका है।
हाल मुलर

5

टाइमजोन बदलते समय, मुझे ऐसा करने का सबसे आसान तरीका मिला, मेनूबार में घड़ी पर क्लिक करके। और फिर "ओपन डेट एंड टाइम प्रेफरेंस" का चयन करें और फिर टैब टाइम जोन चुनें।

वैकल्पिक रूप से सिस्टम प्राथमिकताएं -> दिनांक और समय और टैब समय क्षेत्र चुनें।

बस किसी के लिए एक सूचक जो OSX के आसपास अपना रास्ता नहीं जानता हो सकता है।


6
यह एक उत्तर नहीं है, इसलिए यह एक टिप्पणी होनी चाहिए। ओएस एक्स के आसपास अपने तरीके से नहीं जानने वाले आईओएस डेवलपर्स की संख्या ... शून्य है।
फतमान

5

यह एक पुराना धागा है लेकिन यह मेरे सवाल के सबसे करीब है। मुझे यूरोप के लिए समय क्षेत्र का अनुकरण करने की आवश्यकता है, यह विधि मेरे लिए काम करती है। 'दिनांक और समय' नल के बजाय 'टाइमज़ोन' टैप पर जाएं। अपने सिस्टम के समय का अनुकरण करने के लिए 'सेट टाइम ज़ोन को स्वचालित रूप से करेंट लोकेशन' बॉक्स का उपयोग करके अनचेक करें और वर्टिकल रेक्टेंगल बार (उस पर ब्लू डॉट के साथ) को स्लाइड करें।

यहां छवि विवरण दर्ज करें


2

मैंने उस समय को बदलने की समस्या के लिए एक स्वचालित समाधान का प्रस्ताव दिया है जिसमें हैक करने की विधि शामिल है स्विज़लिंग: https://stackoverflow.com/a/34793193/829338 । मुझे लगता है कि तदनुसार समय क्षेत्र को बदलने के लिए भी काम करना चाहिए।


मुझे अपने ऐप का स्वचालित रूप से परीक्षण करने की आवश्यकता थी, जिसके लिए sys समय को बदलना आवश्यक था। मैंने किया था, टॉम ने क्या सुझाव दिया था: खुश हैकॉई विधि स्वाइलिंग।

प्रदर्शनकारी उद्देश्यों के लिए, मैं केवल परिवर्तन करता हूं [NSDate date]लेकिन नहीं [NSDate dateWithTimeIntervalSince1970:]

सबसे पहले आपको अपनी कक्षा विधि बनाने की आवश्यकता है जो नए [NSDate दिनांक] के रूप में कार्य करती है। मैंने इसे लागू करने के लिए बस एक निरंतर timeDifference द्वारा समय बदलने के लिए।

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];
}

अब तक, बहुत आसान है। अब मज़े वाला हिस्सा आया। हम दोनों वर्गों और विनिमय कार्यान्वयन से विधियां प्राप्त करते हैं (यह मेरे लिए ऐपडेलगेट में काम करता था, लेकिन मेरे यूआईटैस्ट वर्ग में नहीं)। इसके लिए आपको आयात करना होगा 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);

IIRC यह स्थानीय सूचनाओं के परीक्षण के लिए काम नहीं करेगा।
स्टीव मोजर

1

मेरा बिल्ड सर्वर UTC है और मेरे कुछ यूनिट परीक्षणों में पीएसटी होने के लिए टाइमज़ोन की आवश्यकता थी। NSTimeZone पर एक श्रेणी का उपयोग करके आप अपने कोड का उपयोग करने के लिए Apple के कार्यान्वयन को ओवरराइड कर सकते हैं। स्विफ्ट के लिए काम करता है केवल परियोजनाओं को भी।

//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

0

सिस्टम दिनांक समय वरीयताओं को बदलने के बाद मुझे Hardware> चुनना था Reset All Content And Settings
केवल इसने मेरे लिए संस्करण 10.3 (SimulatorApp-880.5 CoreSimulator-681.5.4) में काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.