我试图用 UNKNOWN 格式从NSString获取NSDate,所以我写了一个如下函数
-(void)dateFromString:(NSString*)string {
NSError *error = NULL;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:(NSTextCheckingTypes)NSTextCheckingTypeDate error:&error];
NSArray *matches = [detector matchesInString:string
options:0
range:NSMakeRange(0, [string length])];
NSLocale* currentLoc = [NSLocale currentLocale];
for (NSTextCheckingResult *match in matches) {
if ([match resultType] == NSTextCheckingTypeDate) {
NSLog(@"Date : %@", [[match date] descriptionWithLocale:currentLoc]);
}
}
}
除了一个地方外,它运作良好。
如果我调用
[self dateFromString:@"6/12"];
打印
日期:星期四, 6月12日,2014年澳大利亚东部时间下午12:00:00 标准时间
同时如果我打电话
[self dateFromString:@"13/12"];
打印
日期:星期五, 12月13日,2013年澳大利亚东部时间下午12:00:00 夏令时
基本上,我希望函数表现一致。由于我住在澳大利亚,它应该在12月6日返回首次执行。第二个通话结果是正确的。
我在这里做错了什么?
答案 0 :(得分:5)
实际上,我写的方法效果很好:)。不幸的是,我的测试手机中的地区格式设置为美国,并且从未回到澳大利亚:我的不好......
@joiningss:向这些方法抛出一些随机格式化的日期字符串,你会惊讶于苹果如何让开发人员轻松。无论如何,非常感谢你。
@ mrt,Chavda& Greg:非常感谢你们。我非常感谢你的帮助。
答案 1 :(得分:0)
您必须使用NSDateFormatter。尝试将if语句替换为:
if ([match resultType] == NSTextCheckingTypeDate) {
NSDate *dateAfter = [match date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];
NSString *formattedDateString = [dateFormatter stringFromDate:dateAfter];
NSLog(@"After: %@", formattedDateString);
}
如果您想以不同的格式显示它,您必须将此行更改为所需的格式:
[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];
如果您希望它与您的第一个示例匹配,请将其更改为:
[dateFormatter setDateFormat:@"EEEE, MMMM dd, yyyy 'at' HH:mm:ss a zzzz"];