6

我有一个 NSString,我需要检查它是否采用这种特定格式 MM/DD/YY。然后我需要将其转换为 NSDate。对此的任何帮助将不胜感激。旁注 - 我已经四处搜索,人们建议使用 RegEx,我从未使用过这个并且一般不清楚。谁能给我指出一个好的资源/解释。

4

4 回答 4

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 为 nil,您将知道何时格式化不正确。如果您需要更多信息,这里是文档的链接:https ://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369- SW1

于 2013-09-03T23:37:25.700 回答
6

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

于 2013-09-03T22:38:16.457 回答
2

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

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

于 2013-09-04T04:55:20.850 回答
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"];
于 2014-04-27T04:43:58.143 回答