我正在测试一些dateFormatter,我有一个简单的问题
formatter :
- (void)testDate {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];
[dateFormatter setLocale:locale];
NSString *stringDate = @"23/03/1";
NSDate *date = [dateFormatter dateFromString:stringDate];
XCTAssertTrue(date == nil);
}我的测试是红色的,因为日期不是零。当我打印日期时:
(lldb) po date
0001-03-22 23:50:39 +0000NSDateFormatter正在填充日期字符串(1->0001),.I不需要这个填充。您认为这是NSDateFormatter的正确行为吗?(这是NSDateFormatter类中的一个bug吗?)我怎么才能避免这种情况?
谢谢
发布于 2015-08-26 06:26:49
我不认为有一个很好的答案,为什么@"23/03/1"被认为是一个有效的日期与格式的@"dd/MM/yyyy"。这就是它的工作原理。但是,如果您想测试它是否为##/##/####格式,您可以这样做:
NSRange range = [stringDate rangeOfString:@"^\\d{2}/\\d{2}/\\d{4}$" options:NSRegularExpressionSearch];
XCTAssert(range.location == NSNotFound, @"Not in ##/##/#### format");显然,您必须将其与NSDateFormatter测试结合起来,以确保这些值也是合理的,但上面将测试数字的数量。
发布于 2015-08-25 17:22:36
日期格式化程序仅用于将字符串日期解析为NSDate。
lldb po命令只是根据一些苹果开发人员认为很好的内容来格式化日期,它仅用于调试。内部NSDate使用一种专有格式,我们认为这是自2001年1月1日格林尼治标准时间第一时间以来的秒数。
您需要的是使用日期格式化程序将日期格式化为所需的字符串格式。
使用问句代码中的格式字符串的示例代码:
NSString *dateString = [dateFormatter stringFromDate:date];
NSLog(@"dateString: %@", dateString);输出:
dateString: 23/03/1999
添加输出日期格式以满足您的需要。
发布于 2015-08-25 17:50:24
我猜想"dd/MM/yyyy“只是一种格式,当NSDateFormatter处理它时,将给定的日期解析为3个数字,并将其转换为date。所以"1“刚转到"0001”。
https://stackoverflow.com/questions/32209686
复制相似问题