我无法解析这个日期字符串:@“2002 0 20”,其中0是1月(第一个月是0,不是1)。
我可以使用NSDateFormatter
来解析此字符串吗?
这里http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Parsing_Dates_Times我读过那个月应该从1开始。
更新 我需要这个格式化器,因为我有这种格式的大量数据(它不是我的数据)。
在没有创建子类和重写格式方法的情况下,我找不到NSDateFormatter
的任何解决方案。
我不使用NSScan,
,因为它是一个太复杂的解决方案,但我认为@Andy是对的。
我使用此代码来解析字符串:
- (BOOL)getObjectValue:(out __autoreleasing id *)obj forString:(NSString *)string range:
(inout NSRange *)rangep error:(out NSError *__autoreleasing *)error
{
int year = 0;
int month = -1;
int day = -1;
int coutRead = sscanf([string cStringUsingEncoding:NSUTF8StringEncoding], "Date.UTC(%i, %i, %i)", &year, &month, &day);
BOOL result = NO;
if (coutRead == 3)
{
NSDateComponents* components = [[NSDateComponents alloc] init];
components.year = year;
components.month = month + 1;
components.day = day;
*obj = [self.calendar dateFromComponents:components];
result = YES;
}
else
{
obj = 0;
*rangep = NSMakeRange(NSNotFound, 0);
result = NO;
}
return result;
}
答案 0 :(得分:3)
试试这个:
NSDateFormatter* formatter = [NSDateFormatter new];
formatter.timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
formatter.shortMonthSymbols = @[@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"10", @"11"];
formatter.dateFormat = @"yyyy MMM dd"; // Note 3 Ms for "short month" format
NSDate* theDate = [formatter dateFromString:@"2002 0 20"];
结果:
2002-01-20 00:00:00 +0000
答案 1 :(得分:1)
不,你不能。手动解析。
随时为您服务:
你有NSString
可以使用自定义分隔符在你的情况下使用自定义分隔符,子空间数组分割字符串。例如:
-(NSArray*)componentsSeparatedByString:(NSString *)separator
NSScanner
可用于直接从字符串中读取整数。
文档简单而全面。