首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于NSDate的NSDataDetector检测

基于NSDate的NSDataDetector检测
EN

Stack Overflow用户
提问于 2013-12-06 07:58:12
回答 2查看 2.7K关注 0票数 9

我试图从一个具有未知NSDate格式的NSString中获取,所以我编写了如下所示的函数

代码语言:javascript
复制
-(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]);
        }
    }
}

除了一个地方,效果很好。

如果我调用

代码语言:javascript
复制
[self dateFromString:@"6/12"];

印出来

日期:2014年6月12日星期四,澳大利亚东部标准时间下午12:00

同时如果我打电话的话

代码语言:javascript
复制
[self dateFromString:@"13/12"];

印出来

日期:2013年12月13日,星期五,澳大利亚东部夏令时间中午12:00

基本上,我希望这个函数表现得一致。既然我住在澳大利亚,它就应该在12月6日回来执行第一次死刑。第二个呼叫结果是正确的。

我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-06 13:35:55

实际上,我写的方法效果很好:)。不幸的是,我的测试电话中的区域格式被设置为美国,从未被调回澳大利亚:我的错误。

@joiningss :将一些随机格式化的日期字符串添加到该方法中,您会感到惊讶的是,苹果为开发人员提供了多么简单的服务。总之,非常感谢你。

@mrt,Chavda&Greg :非常感谢大家。我真的很感激你的帮助。

票数 6
EN

Stack Overflow用户

发布于 2013-12-06 08:50:53

你必须使用NSDateFormatter。尝试将if语句替换为:

代码语言:javascript
复制
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);
}

如果您想以不同的格式显示它,则必须将该行更改为必需的格式:

代码语言:javascript
复制
[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];

如果希望它与第一个示例匹配,请将其更改为:

代码语言:javascript
复制
[dateFormatter setDateFormat:@"EEEE, MMMM dd, yyyy 'at' HH:mm:ss a zzzz"];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20418863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档