2011-09-24 160 views
0

我从webservice获取字符串“2011-09-24T00:30:00.000-07:00”。 我不知道这是什么格式,并希望在目标c中的日期对象转换。将字符串转换为NSDate对象

因此,任何知道如何将此字符串转换为日期。

非常感谢您

+0

可能的重复[是否有一种简单的方法将ISO8601时间戳转换为格式化的NSDate?](http://stackoverflow.com/questions/2201216/is-there-a-simple-way-of-converting- an-iso8601-timestamp-to-a-formatted-nsdate) –

回答

0

问题已经被问了几次,你就需要使用nsdateformatter:

NSDate from NSString

也是谷歌:NSDate的距离的NSString

4

有从这种格式获得日期/时间的小问题,即需要删除的时区中的':',Apple不处理这种情况,也不是适当的UTS格式。下面是一个例子:

NSString *dateString = @"2011-09-24T00:30:00.000-07:00"; 
dateString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange(dateString.length-3, 1)]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
NSDate *date = [formatter dateFromString:dateString]; 
NSLog(@"date: %@", date); 

的NSLog输出:date: 2011-09-24 07:30:00 +0000

作为测试显示刚创建的日期:

NSString *testDateString = [formatter stringFromDate:date]; 
NSLog(@"date: %@", testDateString); 

的NSLog输出:date: 2011-09-24T03:30:00.100-0400

注意,时间和时区域已被NSLog转换为我的本地时区,考虑到这两个更改的日期/时间与原始相同。

+0

嗨,感谢您的回复此代码帮助我创建日期对象,但问题是它显示我错误的时间,因为我的时区可能不同,你能够创建激励时间,就像我给出的字符串一样。如果是,那么你能告诉我该怎么做...... –

0

通常由日期/时间表示Web服务的字符串格式是RFC 3339

它不能被轻易地转化成和从的NSDate,因为它可以包括各种信息,不通过的NSDate只是所能表述(如时间偏移从UTC开始,日期没有指定时间。)

有些类将RFC 3339字符串映射到本地可可类型,如this。您可以通过简单的转换来获得快捷方式,但对于健壮的代码,可以使用专门编写的类来处理表示。