我有一个包含.net datetime(rawData)的字符串,我试图使用NSDate
将其解析为NSDateFormatter
对象。我认为我的格式字符串可能是错误的,因为dateFromString:
方法返回nil。任何人都可以帮我解决这个问题吗?
NSString *rawData = @"2009-10-20T06:01:00-07:00";
//Strip the colon out of the time zone
NSRange timezone = NSMakeRange([data length] - 3, 3);
NSString *cleanData = [rawData stringByReplacingOccurrencesOfString:@":" withString:@"" options:NSCaseInsensitiveSearch range:timezone ];
//Setup a formatter and parse it into a NSDate object
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-ddThh:mm:ssZ"];
NSDate *result = [df dateFromString: cleanData]; //Result is nil
答案 0 :(得分:3)
使用iOS 6.0及更高版本时,会添加带有冒号分隔小时和分钟的时区表示。(ZZZZZ
或后备z
)请参阅以下链接Date Formats
这使代码非常简单
NSString *dateString = @"2009-10-20T06:01:00-07:00";
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
NSDate *date = [dateFormatter dateFromString:dateString];
NSLog(@"%@",date);
答案 1 :(得分:0)
试试这个:
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
df.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SS";
df.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease];
NSDate *result = [df dateFromString:rawData];
答案 2 :(得分:0)
看起来.NET输出日期为ISO 8601字符串?为了解析这些,我使用Peter Hosey编写的开源NSFormatter子类,你可以找到here。不幸的是,使用简单的dateFormat字符串正确解析这些并不是一件容易的事。另请参阅this question。
答案 3 :(得分:0)
我刚刚测试了这段代码并且工作正常:
NSString *rawData = @"2009-10-20 06:01:00-07:00";
//Strip the colon out of the time zone
NSRange timezone = NSMakeRange([rawData length] - 3, 3);
NSString *cleanData = [rawData stringByReplacingOccurrencesOfString:@":" withString:@"" options:NSCaseInsensitiveSearch range:timezone ];
// Get rid of the T also
cleanData = [cleanData stringByReplacingOccurrencesOfString:@"T" withString:@" "];
//Setup a formatter and parse it into a NSDate object
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd HH:mm:ssZZZ"];
NSDate *result = [df dateFromString: cleanData]; //Result is ni
NSLog(@"Result %@", result);
几个笔记