从NSString转换为NSDate时,日期会发生变化

时间:2010-09-28 11:15:26

标签: iphone nsdate nsdateformatter

我在NSDateFormatter的帮助下将NSString转换为NSDate。现在代码可以在所有操作系统中使用设备&模拟器,但它在英国,美国地区创建不同的输出。这是我正在使用的代码。

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

NSString *dateString=[NSString stringWithString:@"2010-09-05 04:00:00"];

NSDate *dateObj = [dateFormatter dateFromString:dateString];

实际日期是:2010-09-05 04:00:00

美国产量:2010-09-04 21:00:00 -0700

似乎问题出在TimeZone / Locale的某处,但不知道解决方案。 我也尝试过:

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

但无法摆脱这个问题。

是否有任何简单的方法可以从NSString获取NSDate,因为字符串实际上代表的不受TimeZone的影响。我只想获得NSDate,因为它出现在NSString中,日期和时间没有变化。时间。有什么办法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

这取决于您再次输出日期的方式。如果您使用的是NSDateFormatter,则会得到相同的结果。如果您只是通过调用[date description]输出日期,则输出会有所不同,因为包含了有关本地时区的信息。

正确的用法是:

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

NSString *dateString=[NSString stringWithString:@"2010-09-05 04:00:00"];

NSDate *dateObj = [dateFormatter dateFromString:dateString];

NSString* finalDateString =  [dateFormatter stringFromDate:dateObj];
[dateFormatter release];

输出:

2010-09-05 04:00:00

我已经在几个时区测试了这段代码。