Ios dateWithTimeIntervalSince1970方法返回不同的时区

Ios dateWithTimeIntervalSince1970方法返回不同的时区,ios,objective-c,nsdate,Ios,Objective C,Nsdate,当我在1970年以后的datewithtimeintervals: 代码如下: NSDateFormatter* dateFormat = [[[NSDateFormatter alloc] init] autorelease]; [dateFormat setDateFormat:format]; [dateFormat setTimeZone:[NSTimeZone localTimeZone]]; //Asia/shanghai +8:00 int64_t timestamp = 7148

当我在1970年以后的
datewithtimeintervals:

代码如下:

NSDateFormatter* dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:format];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]]; //Asia/shanghai +8:00
int64_t timestamp = 714880800 ;//  683258400
NSDate* date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSString *str = [dateFormat stringFromDate:date];
我第一次使用timestamp=714880800,然后第二次使用683258400,但结果是: 日期说明:

1992-08-27 02:00:00 +0000
1991-08-27 02:00:00 +0000


为什么时区不同?有什么我遗漏的吗?

NSDate对象表示一个时间点。它不包含任何时区信息

Xcode试图用一个特定的时区来表示NSDate对象,因为没有时区,时间是没有意义的

Xcode为不同的
NSDate
对象使用不同的时区这一事实可能会告诉您“嘿,NSDate与时区无关,我只是用它来表示时间,仅此而已”

编辑:将其注销

NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"] ;
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];
NSTimeInterval timestamp = 714880800 ;
NSDate* date1 = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSLog(@"%@", date1) ;
NSString *str = [dateFormat stringFromDate:date1] ;
NSLog(@"%@", str) ;
您将获得:

1992-08-27 02:00:00 +0000 <<<< add by myself (GMT)
1992-08-27 10:00:00       <<<< add by myself (CCT)

1992-08-27 02:00:00+0000第一个“时间戳”值是Thu,1992年8月27日02:00:00 GMT。您期望什么?(记住,NSDate总是UTC。)@HotLicks我知道它是UTC,“timestamp”的第二个值是1991-08-27 02:00:00+0000,但为什么时区发生了变化,请看第二个“日期”:时区从“CST”变为“CDT”可能:1949年中国内战后,中华人民共和国为其所有领土建立了统一的时区GMT+8-1,称为北京时间(有时称为中国标准时间)。夏时制是从1986年到1991年观察到的。“这有什么关系吗?如果你计算上海当地的时间,我预计1991年8月的当地日期时间是夏令时,但不是1992年。@MattGibson是的,我查看了一些关于CDT的信息,中国在1986年和1991年使用CDT。因此时区标准从CST改为CDT,时间+1小时。它在1992年被取消了!我通过:[dateFormat setTimeZone:[NSTimeZone localTimeZone]]设置时区;(+8:00)如何在我的时区中获得正确的日期字符串第一次,是对的,时区:CST(+8:00),但第二次,它变为CDT(+9:00)是的,第一次是对的,然后尝试NSTimeInterval timestamp=683258400。我会得到结果“1991-08-27 11:00”@Dean没错
1991-08-27 02:00:00+0000 GMT
1991-08-27 11:00:00 CCT
我知道时间对了,但我的时区是(+8:00),我没有更改时区,为什么更改为(+9:00),如果我注销str,它会给我一个错误的字符串:“1991-08-27 11:00:00”,我需要的是“1991-08-27 10:00:00”