将.net日期时间字符串解析为目标C中的NSDate对象

时间:2011-03-17 00:10:55

标签: iphone objective-c ios

我有一个包含.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

4 个答案:

答案 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);

几个笔记

  1. 摆脱T。
  2. 小时的24小时格式为HH