Objective c 检查字符串的格式是否为dd.mm.yyyy
我想检查字符串的格式是否为dd.mm.yyyy,如Objective c 检查字符串的格式是否为dd.mm.yyyy,objective-c,string,date,format,Objective C,String,Date,Format,我想检查字符串的格式是否为dd.mm.yyyy,如 if(myString is in format dd.mm.yyyy) { NSLog(@"Ok"); } else{ NSLog(@"No"); 您可以使用正则表达式来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”: 希望这有帮助 您可以使用Regex来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”: 希望这有帮助 您可以使用如下代码: NSString *dateString = @"01.0
if(myString is in format dd.mm.yyyy) {
NSLog(@"Ok");
}
else{
NSLog(@"No");
您可以使用正则表达式来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”:
希望这有帮助 您可以使用Regex来检查它。 例如,此代码使用正则表达式检查“mm.dd.yyyy”:
希望这有帮助 您可以使用如下代码:
NSString *dateString = @"01.01.1970";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd.MM.yyyy";
if ([dateFormatter dateFromString:dateString]) {
//YES
}
为什么NSDateFormatter
:创建它是为了分析日期。另外,通过这种方式,您可以轻松地更改日期格式,并且作为一种副作用,您可以使用有效的NSDate
对象
但是,如果您打算经常使用此dateFormatter
(例如,它在UITableViewCell
中使用),则可能会遇到性能问题。如果您这样做了,并且您确信是NSDateFormatter
导致了它(这里的工具可能会帮助您),您可以重用dateFormatter
。例如,像这样:
NSString *dateString = @"01.01.1970";
static NSDateFormatter *dateFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd.MM.yyyy";
});
if ([dateFormatter dateFromString:dateString]) {
//YES
}
似乎(根据我运行的测试,我猜是这样的)对dateFromString
的第一次调用会触发dateFormatter
中的延迟初始化,并且需要一些时间(下面是一些测试结果)。如果重用它,则只执行一次初始化
在我的iOS 8.4.1版iPhone 5S上,dispatch\u once
版本的运行速度大约快10倍:
调度一次
:0.536秒,娱乐:5.475秒
(分析10000个日期的时间)
在同一测试中,@zaph的iPhone 6S与iOS 9.x的性能相差2倍:
调度一次
:0.57秒,娱乐:1.01秒
(分析10000个日期的时间)
因此,这取决于设备、操作系统版本以及使用dateFormatter的强度。在某些情况下,第二个代码片段可能是杀伤力过大。但我遇到的情况是,它显著提高了性能
UPD:还请注意,美国日期通常也用点作为分隔符,因此看起来是
dd.MM.yyyy
日期实际上可能是MM.dd.yyyy
日期(例如,4月5日而不是5月4日)。对于日期dd>12
而言,这不是问题,但在其他方面则是问题。但是,我认为如果没有额外的上下文,您无法对此采取任何措施,因此请注意。您可以使用如下代码:
NSString *dateString = @"01.01.1970";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd.MM.yyyy";
if ([dateFormatter dateFromString:dateString]) {
//YES
}
为什么NSDateFormatter
:创建它是为了分析日期。另外,通过这种方式,您可以轻松地更改日期格式,并且作为一种副作用,您可以使用有效的NSDate
对象
但是,如果您打算经常使用此dateFormatter
(例如,它在UITableViewCell
中使用),则可能会遇到性能问题。如果您这样做了,并且您确信是NSDateFormatter
导致了它(这里的工具可能会帮助您),您可以重用dateFormatter
。例如,像这样:
NSString *dateString = @"01.01.1970";
static NSDateFormatter *dateFormatter = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd.MM.yyyy";
});
if ([dateFormatter dateFromString:dateString]) {
//YES
}
似乎(根据我运行的测试,我猜是这样的)对dateFromString
的第一次调用会触发dateFormatter
中的延迟初始化,并且需要一些时间(下面是一些测试结果)。如果重用它,则只执行一次初始化
在我的iOS 8.4.1版iPhone 5S上,dispatch\u once
版本的运行速度大约快10倍:
调度一次
:0.536秒,娱乐:5.475秒
(分析10000个日期的时间)
在同一测试中,@zaph的iPhone 6S与iOS 9.x的性能相差2倍:
调度一次
:0.57秒,娱乐:1.01秒
(分析10000个日期的时间)
因此,这取决于设备、操作系统版本以及使用dateFormatter的强度。在某些情况下,第二个代码片段可能是杀伤力过大。但我遇到的情况是,它显著提高了性能
UPD:还请注意,美国日期通常也用点作为分隔符,因此看起来是
dd.MM.yyyy
日期实际上可能是MM.dd.yyyy
日期(例如,4月5日而不是5月4日)。对于日期dd>12
而言,这不是问题,但在其他方面则是问题。但是,我认为如果没有额外的上下文,您无法对此做任何事情,因此请注意。您可以使用正则表达式:
NSString *testString = @"11.22.3333";
NSString *pattern = @"^\\d{2}\\.\\d{2}\\.\\d{4}$";
NSRange range = [testString rangeOfString:pattern options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
NSLog(@"Ok");
}
else{
NSLog(@"No");
}
位,这不是一个好的日期测试。您可以使用正则表达式:
NSString *testString = @"11.22.3333";
NSString *pattern = @"^\\d{2}\\.\\d{2}\\.\\d{4}$";
NSRange range = [testString rangeOfString:pattern options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
NSLog(@"Ok");
}
else{
NSLog(@"No");
}
这不是一个好的日期测试。使用
NSDateFormatter
。使用NSDateFormatter
。为什么不使用NSDateFormatter
?那个regex真是疯了。它能处理闰年吗?@rmaddy:在这种情况下(仅“mm.dd.yyyy”),我认为NSDateFormatter是正确的选择。但是,如果要允许选中“mm/dd/mmmm”、“mm-dd-yyyy”,。。。试着用正则表达式,嗯NSDateFormatter
是正确的选择,无论日期格式如何。这就是它的目的。@Franken,但OP想要的是“dd.mm.yyyy”,而不是“mm.dd.yyyy”:)并且有一个问题:将此regexp重写为“dd.mm.yyyy”的regexp(实际上是mm,不是mm,但没关系)是。。。棘手:)尤其是在你写了半年之后。尽管如此,我还是同意,可以使用regexp检查日期是否以多种格式有效。但是这会使这个regexp更大、更可怕,所以如果是我的话,我不会使用它:)此外,您的regexp认为02.29.2015
是一个有效日期。这是错误的,因为它不是闰年。regexp很棘手:)@Franken,而0001
则是一个“正确”的日期。下面是可视化调试器中的regexp:为什么不使用NSDateFormatter
?那个regex真是疯了。它能处理闰年吗?@rmaddy:在这种情况下(仅“mm.dd.yyyy”),我认为NSDateFormatter是正确的选择。但是,如果要允许选中“mm/dd/mmmm”、“mm-dd-yyyy”,。。。尝试使用注册表