【发布时间】:2013-09-03 22:36:47
【问题描述】:
我有一个 NSString,我需要检查它是否采用这种特定格式 MM/DD/YY。然后我需要将其转换为 NSDate。对此的任何帮助将不胜感激。旁注 - 我已经四处搜索,人们建议使用 RegEx,我从未使用过这个并且一般不清楚。谁能给我指出一个好的资源/解释。
【问题讨论】:
标签: ios cocoa-touch nsstring nsdate
我有一个 NSString,我需要检查它是否采用这种特定格式 MM/DD/YY。然后我需要将其转换为 NSDate。对此的任何帮助将不胜感激。旁注 - 我已经四处搜索,人们建议使用 RegEx,我从未使用过这个并且一般不清楚。谁能给我指出一个好的资源/解释。
【问题讨论】:
标签: ios cocoa-touch nsstring nsdate
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
【讨论】:
对这两个任务使用NSDateFormatter。如果您可以将字符串转换为日期,那么它的格式是正确的(并且您已经有了结果)。
【讨论】:
我知道这是一个迟到的答案,但不可能始终保证字符串采用这种特定的日期格式。
日期格式化程序、正则表达式甚至人类都无法验证某些日期,因为我们不知道用户输入的是“mm/DD/yy”还是“DD/mm/yy”。在某些地方通常先输入月份中的某天,而在其他地区则先输入月份。那么,如果他们输入“09/06/2013”,他们的意思是“9 月 6 日”还是“6 月 9 日”?
【讨论】:
这是一个简单的功能,供任何寻求简单解决方案的人使用。
- (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"];
【讨论】: