Objective c NSString到NSDate的转换问题:日期始终相同!

Objective c NSString到NSDate的转换问题:日期始终相同!,objective-c,datetime,Objective C,Datetime,下面是我的类方法,用于将NSString解析为NSDate对象。代码如下: + (NSDate *) stringToDate:(NSString *) string { NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [dateFormatter se

下面是我的类方法,用于将
NSString
解析为
NSDate
对象。代码如下:

+ (NSDate *) stringToDate:(NSString *) string { NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.AAA Z"]; NSDate *date = [dateFormatter dateFromString:string]; NSLog(@"stringToDate(\"%@\") = '%@'", string, date); [dateFormatter release]; return date; } +(NSDate*)字符串日期:(NSString*)字符串{ NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; [日期格式化程序setDateFormat:@“yyyy-MM-dd HH:MM:ss.AAA Z”]; NSDate*date=[dateFormatter dateFromString:string]; NSLog(@“stringToDate(\“%@\”='%@',字符串,日期); [日期格式化程序发布]; 返回日期; } 运行它,我得到以下输出:

stringToDate("2011-07-07 16:26:07.000 +0200") = '2011-07-06 22:00:00 +0000' stringToDate("2011-07-07 16:26:17.000 +0200") = '2011-07-06 22:00:00 +0000' stringToDate(“2011-07-07 16:26:07.000+0200”)=“2011-07-06 22:00:00+0000” stringToDate(“2011-07-07 16:26:17.000+0200”)=“2011-07-06 22:00:00+0000” 。。。同样的输出!你能帮我吗?

你应该写:

NSLog(@"stringToDate(\"%@\") = '%@'", string, 
       [dateFormatter stringFromDate:date]);
否则,
NSLog
调用
date
对象的
description
方法。以下是有关此方法的文档说明:

说明

返回接收器的字符串表示形式

-(NSString*)说明

返回值

接收机的字符串表示形式,国际格式为YYYY-MM-DD HH:MM:SS±HHMM,其中±HHMM表示从GMT开始的时区偏移量,单位为小时和分钟(例如,“2001-03-24 10:45:32+0600”)

如您所见,格式与您使用的格式不完全相同

编辑


尝试将
dateFormatter
的dateFormat参数更改为
yyyy-MM-dd HH:MM:ss Z
并使用
[dateFormatter-stringFromDate:date]
显示日期。

如果我没弄错,您的问题是这两个日期不完全相同

如果这是问题所在,请检查线路

[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

他对此负责。它正在将给定的时间对象转换为GMT+00时区。

。。。这就是其他转换的情况:stringToDate(“2011-06-24 08:00:00.000+0200”)=“2011-06-23 22:00:00+0000”stringToDate(“2011-07-24 08:00:00+0200”)=“2011-07-23 22:00:00+0000”我不确定我是否理解您对这个“stringToDate”(“2011-06-24 08:00:00+0200”)=“2011-06-23 22:00+0000”stringToDate的问题。”2011-07-24 08:00:00.000+0200”)='2011-07-23 22:00:00+0000'”但如果您的问题是,无论您传递了什么输入字符串,返回日期字符串都是相同的。。。如果是这种情况,请检查以确保传递的字符串不同。实际上,这是我的目标。我期待的是:stringToDate(“2011-07-07 17:14:40.000+0200”)='2011-07-07 17:14:40+0200'我认为Tejesh和我都是对的:您使用的日期格式化程序正在调整时区和
描述
方法所使用的国际格式-
YYYY-MM-DD HH:MM:SS±HHMM
不会给出您想要的。查看我的编辑。我将
description
方法保留在
date
对象上。我刚刚将格式更改为“yyyy-MM-dd HH:MM:ss.000z”(000而不是AAA),它可以工作!对于我的目标来说,这已经足够了。