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

Iphone 将.net日期时间字符串解析为目标C中的NSDate对象,iphone,objective-c,ios,Iphone,Objective C,Ios,我有一个包含.net日期时间(rawData)的字符串,我正试图使用NSDateFormatter将其解析为NSDate对象。我认为我的格式字符串可能是错误的,因为dateFromString:方法返回nil。有谁能帮我解决这个问题吗 NSString *rawData = @"2009-10-20T06:01:00-07:00"; //Strip the colon out of the time zone NSRange timezone = NSMakeRange([data length

我有一个包含.net日期时间(rawData)的字符串,我正试图使用
NSDateFormatter
将其解析为
NSDate
对象。我认为我的格式字符串可能是错误的,因为
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
试试这个:

    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];

看起来.NET将日期输出为ISO 8601字符串?为了解析这些,我使用了一个由Peter Hosey编写的开源NSFormatter子类,您可以找到它。不幸的是,使用一个简单的dateFormat字符串正确解析这些数据并不是件小事。另请参见。

我刚刚测试了这段代码,它的工作如下:

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);
几张纸条

  • 摆脱T
  • 小时的24小时格式为HH

  • 在iOS 6.0及更高版本中,添加了以冒号分隔小时和分钟的时区表示。(
    ZZZZZ
    或fallback
    z
    )请参阅以下链接

    这使得代码非常简单

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

    苹果操作系统使用以下信息来格式化日期:24小时格式中的小时数是HH。可能是HH的重复。您是否也在设备上测试过它?根据我的经验,在不指定区域设置或时间和日期样式的情况下,尝试使用NSDateFormatter将日期解析为字符串有时在模拟器上有效,但在设备上无效。我目前没有带电缆。当我到家的时候,我会测试一下,让你知道。我已经在模拟器上测试过了,效果很好。非常感谢大家的帮助。明天我将在设备上测试这个,并发布我的结果。我无法让这个正常工作,我认为格式化字符串导致了这里的问题。谢谢你的回复。谢谢你的链接。这些解决方案也很有效。ISO8601DateFormatter提供了一些干净的代码。