我想通过代码在iOS中设置系统时区,日期时间。任何想法或私人api帮助我? 示例:将时区设置为GMT + 8,将日期时间设置为2013年8月10日晚上8:30。怎么做?谢谢!
答案 0 :(得分:15)
正如其他人所说,您无法在应用内编辑系统时区,但可以使用NSTimeZone
static NSTimeZone *cachedTimeZone;
@implementation DateUtilTests
+ (void)setUp
{
[super setUp];
cachedTimeZone = [NSTimeZone defaultTimeZone];
// Set to whatever timezone you want your tests to run in
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
}
+ (void)tearDown
{
[NSTimeZone setDefaultTimeZone:cachedTimeZone];
[super tearDown];
}
// ... do some tests ...
@end
为您的整个应用设置默认时区}。
你提到这是用于测试的,所以我假设这是用于单元测试一些自定义日期格式化程序等等,在这种情况下你可以在你的单元测试中做这样的事情:
{{1}}
我希望有所帮助!
答案 1 :(得分:2)
@Filip在评论中如何表示,无法在应用内编辑系统偏好设置。您可能会做什么(不知道它对您有用)是在您的APP内设置您正在使用的NSDates的时区。
这是如何做到这一点的一个例子:
NSString *dateString = @"2013-08-07 17:49:54";
NSDateFormatter *dateFormatter = [NSDateFormatter new];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Europe/London"]; //set here the timezone you want
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormatter setTimeZone:timeZone];
NSDate *date = [dateFormatter dateFromString:dateString];
以下是与timeZoneWithName一起使用的可能时区列表:`:http://pastebin.com/ibNU2RcG
答案 2 :(得分:2)
仍然可以在Xcode 11上工作。swift 5的实现看起来像:
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
//All test by default will use GMT time zone. If different, change it within the func
TimeZone.ReferenceType.default = gmtTimeZone
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
//Rest to current
TimeZone.ReferenceType.default = TimeZone.current
}
在我的XCTestCase类中,我的时区被声明为:
private let gmtTimeZone = TimeZone(abbreviation: "GMT")!
private let gmtPlus1TimeZone = TimeZone(abbreviation: "GMT+1")!
private let gmtMinus1TimeZone = TimeZone(abbreviation: "GMT-1")!
我将所有测试默认设置为GMT,但是对于特定测试,我想更改它,然后:
func test_Given_NotGMTTimeZone_ThenAssertToGMT() {
TimeZone.ReferenceType.default = gmtPlus1TimeZone
...
}
已添加 您还可以使用诸如“英国夏令时”之类的时区名称
private let britishSummerTimeZone = TimeZone(abbreviation: "BST")!