检查NSString的具体日期格式

时间:2013-09-03 22:36:47

标签: ios cocoa-touch nsstring nsdate

我有一个NSString,我需要检查它是否采用这种特定格式MM / DD / YY。然后我需要将其转换为NSDate。任何有关这方面的帮助将非常感激。旁注 - 我已经搜索过,人们建议使用RegEx,我从来没有使用过这个,一般都不清楚。任何人都可以向我指出一个好的资源/解释。

4 个答案:

答案 0 :(得分:7)

NSString *strDate1 = @"02/09/13";
NSString *strDate2 = @"0123/234/234";

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yy"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDate *dateFormat1 = [dateFormatter dateFromString:strDate1];
NSDate *dateFormat2 = [dateFormatter dateFromString:strDate2];

NSLog(@"%@", dateFormat1); // prints 2013-09-02 00:00:00 +0000
NSLog(@"%@", dateFormat2); // prints (null)

因此,如果NSDate为零,您将知道何时格式不正确。如果您需要更多信息,请参阅文档链接:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1

答案 1 :(得分:6)

对这两项任务使用NSDateFormatter。如果您可以将字符串转换为日期,那么它的格式正确(并且您已经有了结果)。

答案 2 :(得分:2)

我知道这是一个迟到的答案,但是不可能始终保证字符串处于这种特定的日期格式。

日期格式化程序,正则表达式甚至是人类无法验证某些日期,因为我们不知道用户是否输入“mm / DD / yy”或“DD / mm / yy”。在某些地方通常先输入当月的日期,而在其他地区则先输入月份。所以,如果他们输入“09/06/2013”​​,他们的意思是“9月6日”还是“6月9日”?

答案 3 :(得分:2)

对于任何寻找简单解决方案的人来说,这是一个简单的功能。

- (BOOL) isTheStringDate: (NSString*) theString
{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *dateFromString = [[NSDate alloc] init];

    dateFromString = [dateFormatter dateFromString:theString];

    if (dateFromString !=nil) {
        return true;
    }
    else {
        return false;
    }
}

您必须更改下面的格式化程序以匹配您的日期使用的格式。

    [dateFormatter setDateFormat:@"yyyy-MM-dd"];