日期格式返回null

时间:2014-01-07 06:19:01

标签: ios iphone objective-c nsdateformatter

我将String转换为Date的代码是:

NSString *dateString = @"2011-09-22 14:10:19";
NSDateFormatter *datetFormat = [[NSDateFormatter alloc] init];
[datetFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [datetFormat dateFromString:dateString];

在我的设备中设置date OFF时,null值为24-Hour Time。当我设置为ON时,它返回正确的日期。我应该使用哪个dateFormat来避免设备上两种时间格式的null

5 个答案:

答案 0 :(得分:4)

对于独立于当前设备设置的日期转换, 你必须设置一个固定的语言环境:

NSLocale *posixLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[datetFormat setLocale: posixLocale];

(比较Technical Q&A QA1480 "NSDateFormatter and Internet Dates")。

答案 1 :(得分:3)

当给定的日期字符串与预期的日期格式不匹配时,NSDateFormatter返回nil

根据Unicode Locale Data Markup Language规范,HH用于0-23小时,而hh用于0到12和AM和PM。正如你已经找到了困难的方法,你不能混淆它们。

如果您需要转换日期格式模板,则应考虑使用[NSDateFormatter dateFormatFromTemplate:options:locale:]docs)让框架根据需要在时间格式格式化程序之间进行转换 - 例如:从默认格式转换为用户的本地化格式。

答案 2 :(得分:2)

你为什么不试试这个,

+ (NSDate*)parseDate:(NSString*)inStrDate format:(NSString*)inFormat {
    NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init];
    [dtFormatter setLocale:[NSLocale systemLocale]];
    [dtFormatter setDateFormat:inFormat];
    NSDate* dateOutput = [dtFormatter dateFromString:inStrDate];
    [dtFormatter release];
    return dateOutput;
}

答案 3 :(得分:0)

无论您是否(或不关心)字符串中包含的日期格式,请使用NSDataDetector解析日期。

//Role players.
NSString *dateString = @"Wed, 03 Jul 2013 02:16:02 -0700";
__block NSDate *detectedDate;

//Detect.
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingAllTypes error:nil];
[detector enumerateMatchesInString:dateString
                       options:kNilOptions
                         range:NSMakeRange(0, [dateString length])
                    usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{ detectedDate = result.date; }];

答案 4 :(得分:0)

12小时和24小时都完美地工作。我测试了样本项目

   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
        [dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"hh:mm a" options:0 locale:[NSLocale currentLocale]]];
        NSString *startDate = [dateFormatter stringFromDate:[NSDate date]];
        NSLog(@"%@",startDate);