Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-c NSDateFormatter时区恢复为GMT_Objective C_Xcode - Fatal编程技术网

Objective-c NSDateFormatter时区恢复为GMT

Objective-c NSDateFormatter时区恢复为GMT,objective-c,xcode,Objective C,Xcode,我正在玩一些时区计算,我注意到一个相当恼人的错误,这给我带来了问题 如果我创建一个日期,使用NSDateformatter将其转换为某个时区,检索该字符串,然后使用dateformatter将该字符串转换回日期对象,它会一直还原为我的本地GMT时间 范例 NSDate *date = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateForm

我正在玩一些时区计算,我注意到一个相当恼人的错误,这给我带来了问题

如果我创建一个日期,使用NSDateformatter将其转换为某个时区,检索该字符串,然后使用dateformatter将该字符串转换回日期对象,它会一直还原为我的本地GMT时间

范例

NSDate *date = [NSDate date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"COT"]];

NSString *str = [dateFormatter stringFromDate:date];
NSLog(@"%@", str);
//prints 2015-02-04 10:33:45 GMT-5

NSDate *newDate = [dateFormatter dateFromString:str];
NSLog(@"%@", newDate);
//Prints 2015-02-04 15:33:45 +0000
为什么它总是回到格林尼治时间?我需要date对象准确地反映我为某些测试目的将dateformatter设置为的时区,因此这是一个非常令人沮丧的问题


任何帮助都将不胜感激

我认为问题在于
NSDate
本身(即,您在末尾记录的值)没有时区-它只是一个瞬间。使用
stringFromDate*格式化值时指定时区*,而将值*解析*回
NSDate
时仍然使用时区*。。。但是
NSDate`值本身不记得时区

举一个不同的例子,假设您有一个用于
NSInteger
IntegerFormatter
,它可以让您说您是想用十六进制还是十进制格式化和解析。您可以将十进制值16格式化为0x10,然后将该值解析回。。。但是
NSInteger
不会“记住”它是从hex解析的。这里完全一样-时区在解析中起作用(至少当值本身没有指定时区时),但它本身不是结果的一部分

我需要date对象准确反映时区


然后您需要将时区与
NSDate
分开,基本上。。。(查看文档,听起来像是
NSCalendarDate
做了您想做的事情,但这是不推荐的。)

一个
NSDate
对象没有时区。当您将其转换为文本时,应使用带有指定时区的
NSDateFormatter
。我已在dateformatter中指定了时区。读我的密码对不起。我以为你在问有关NSLog(@“%@”,newDate)的问题。NSDate的后缀包含GMT偏移量,当我使用dateformatter并将其设置为新时区时,我需要该后缀来准确反映我设置的时区to@AdamM:否,您的意思是“将NSDate转换为字符串的结果包含GMT偏移量”。这与NSDate本身拥有这些信息不是一回事。啊,这是不幸的。可惜他们不赞成NSCalenderdate,这对我来说是完美的。那我就得修改我的代码了。标记为正确。谢谢你的信息!