我将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
。
答案 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)
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);