1

我阅读了所有内容NSDateNSDateFormatter但没有解决我的问题。我需要获取我当前的日期,并在 NSDate 对象中添加这个日期,但是当我这样做时,我的时间总是带有 +2 小时。我正在做这样的事情:

NSDateFormatter * dateformatter = [[NSDateFormatter alloc]init];
[dateformatter setLocale:[NSLocale currentLocale]];
[dateformatter setDateFormat:@"yyyy-mm-dd HH:mm:ss"];
//NSTimeZone* localTimeZone = [NSTimeZone localTimeZone];
//NSLog(@"timezone local = %@",localTimeZone);
//[NSTimeZone timeZoneWithAbbreviation:@"BRST"];
NSString * current = [dateformatter stringFromDate:[NSDate date]];
NSLog(@"current = %@",current); // Cool this is my current date!

NSDate *thedate = [dateformatter dateFromString:current]; 
NSLog(@"date = %@",thedate);// NO! my hours is wrong

我需要在 中添加我当前的日期NSDate,并且还需要添加NSDate带有字符串的 a(带有方法stringFromDate)。字符串示例:2013-01-21 17:05:17。当在返回 NSDate 的方法中传递这个字符串时stringFromDate,我打印 NSDate 并给我带来这个错误的日期:2013-01-21 19:05:17 +0000。

只是简历:

需要将我当前的日期添加到 NSDate 中,还需要添加NSDate类似NSString2013-01-21 17:05:17 的内容。我现在的本地是巴西/圣保罗,NSTimerZone 的缩写是 BRST。

4

2 回答 2

1

theDate是正确的,您只需在另一个时区(+0000)中显示它。

NSDate 对象对时区一无所知。但是 NSDateFormatter 对象确实知道。默认情况下 NSDateFormatter 使用当前时区(用户在操作系统首选项中设置)。

当您创建一个字符串并显示它时,它会显示在您的时区 BRST (-0200): 2013-01-21 17:05:17 中。然后,当您从此字符串创建日期时,日期格式化程序再次将其视为 BRST 时区中的日期。但是当您显示原始 NSDate 对象时,它会显示 +0000 时区的日期:2013-01-21 19:05:17 +0000,即 BRST 中的 17:05:17。

于 2013-02-14T21:09:26.340 回答
1

这是因为在你的dateformatter你使用HH而不是hh. 在您的代码中将其更改为:

[dateformatter setDateFormat:@"yyyy-mm-dd hh:mm:ss"];

您可以在此处查找有关此主题的信息:链接

它使用 yyyy 来指定年份组件。一个常见的错误是使用 YYYY。yyyy 指定日历年,而 YYYY 指定年份(“一年中的一周”),用于 ISO 年-周日历。在大多数情况下,yyyy 和 YYYY 产生相同的数字,但它们可能不同。通常,您应该使用日历年。

于 2013-02-14T17:29:42.103 回答