如何在iPhone模拟器中更改时间和时区?
当前回答
我已经提出了一个自动解决改变时间的问题,包括黑客方法swizzling: https://stackoverflow.com/a/34793193/829338。我想这也适用于相应地改变时区。
我需要自动测试我的应用程序,这需要改变系统时间。我照汤姆的建议去做了:快乐的手工搅拌法。
出于演示目的,我只改变了[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];
}
到目前为止,很简单。现在到了有趣的部分。我们从两个类和交换实现中获得方法(它在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);
其他回答
在更改时区时,我发现最简单的方法是点击菜单栏中的时钟。然后选择“打开日期和时间首选项”,然后选择时区选项卡。
或者选择“System Preferences -> Date and Time”,选择“Time Zone”页签。
只是给那些不知道如何使用OSX的人一个提示。
在更改系统日期时间首选项后重新启动模拟器,您将看到反映的更改。这对我很管用。
我的构建服务器是UTC,我的一些单元测试需要时区是PST。使用NSTimeZone上的一个类别,你可以覆盖苹果的实现来使用你的代码。也适用于swift项目。
//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
我猜它使用您的系统时区,所以在系统首选项中更改TZ可能会奏效
在更改系统日期时间首选项后,我不得不选择硬件>重置所有内容和设置。 只有在10.3版(SimulatorApp-880.5 CoreSimulator-681.5.4)中,我才这样做。
推荐文章
- 创建配置文件失败
- 如何在Django中设置时区
- Java SimpleDateFormat("yyyy-MM-dd' t ' hh:mm:ss' z '")给出的时区为IST
- 为什么ARC仍然需要@autoreleasepool ?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 复制并重命名Xcode项目和相关文件夹
- 我如何改变UIButton标题颜色?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- 为什么单元测试中的代码不能找到包资源?
- 以编程方式创建segue
- 在Objective-C中@synchronized如何锁定/解锁?
- Xcode 10的对象库去哪了?
- Xcode 10的UI元素在哪里?