【问题标题】:Check NSString for specific date format检查 NSString 以获取特定的日期格式
【发布时间】:2013-09-03 22:36:47
【问题描述】:

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

【问题讨论】:

    标签: ios cocoa-touch nsstring nsdate


    【解决方案1】:
    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

    【讨论】:

    • @lnafziger 是对的。如果您使用类似于我上面提到的内容,请务必记住这一点。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        这是一个简单的功能,供任何寻求简单解决方案的人使用。

        - (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"];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-08
          相关资源
          最近更新 更多