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),它可以工作!对于我的目标来说,这已经足够了。