我正在尝试将Unix时间字符串转换为Xcode中的Date,但是我的错误时间持续了两个小时。我无法弄清楚我做错了什么。有人能帮帮我吗?
NSString *unixTime = @"1402473600";
NSTimeInterval timeStamp = [unixTime doubleValue];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeStamp];
它给了我:2014-06-11 10:00:00 CEST
...但应该是:2014-06-11 08:00:00 CEST
答案 0 :(得分:1)
xCode返回UTC + 0时区中的正确值。不要忘记CEST是UTC + 2。以下是测试它的代码段:
// your code
NSString *unixTime = @"1402473600";
NSTimeInterval timeStamp = [unixTime doubleValue];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeStamp];
NSLog(@"%@", date); // 08:00:00 +0000
// CEST, UTC+2 formatting
NSDateFormatter *localDF = [[NSDateFormatter alloc] init];
[localDF setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CEST"]]; // which is CEST, which is UTC+2
[localDF setDateFormat:@"HH:mm:ss Z"];
NSLog(@"%@", [localDF stringFromDate:date]); // 10:00:00 +0200
您可以将日期转换为CEST时区。根据结果,您可以将给定日期转换为具有调整值的新日期变量,或者根据所需时区创建字符串表示:
变体1.使用时区返回给定日期的字符串表示形式:
NSDateFormatter *cestDF = [[NSDateFormatter alloc] init];
[cestDF setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"CEST"]]; // which is CEST, which is UTC+2
[cestDF setDateFormat:@"HH:mm:ss Z"];
NSString *cestDateStr = [cestDF stringFromDate:date];
变体2.新的和调整后的日期对象:
NSTimeInterval timeZoneOffset = [[NSTimeZone timeZoneWithAbbreviation:@"CEST"] secondsFromGMT];
NSTimeInterval cestTimeInterval = [date timeIntervalSinceReferenceDate] + timeZoneOffset;
NSDate *cestDate = [NSDate dateWithTimeIntervalSinceReferenceDate:cestTimeInterval];
注意:NSDate
内部没有时区概念,所以你应该记住你的NSDate
变量在哪个时区。