将不同的字符串转换为 NSDate - 1 是正确的,第二个是第一个的副本
Converting different strings to NSDate - 1 is correct, the 2nd is a duplicate of the 1st
出于某种原因,这段代码没有正确转换第二个字符串;这是代码:
NSLog(@"\n\nsearchStartTime: %@ searchEndTime: %@",searchStartTime, searchEndTime);
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm a"];
startDate = [dateFormatter dateFromString:searchStartTime];
endDate = [dateFormatter dateFromString:searchEndTime];
NSLog(@"\n\nstartDate: %@ endDate: %@", startDate, endDate);
这是 searchStartTime 和 searchEndTime 的定义和值:
searchStartTime: 2015-03-05 08:30 AM searchEndTime: 2015-03-05 09:30 AM
这是 NSLog 的结果:
startDate: 2015-03-05 08:30:00 +0000 endDate: 2015-03-05 08:30:00 +0000
我这里的代码有什么问题?我想获取这两个 date/time 对象并在 NSPredicate 中使用它们来比较核心数据记录中的日期。
一个错误是 "HH",它是 24 小时制,但您还使用 "a" 作为 & pm。
改为使用 "hh" 表示 12 小时。
示例:
NSString *searchStartTime = @"2015-03-05 08:30 AM";
NSString *searchEndTime = @"2015-03-05 09:30 AM";
NSLog(@"\n\nsearchStartTime: %@ searchEndTime: %@", searchStartTime, searchEndTime);
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat: @"yyyy-MM-dd hh:mm a"];
NSDate *startDate = [dateFormatter dateFromString:searchStartTime];
NSDate *endDate = [dateFormatter dateFromString:searchEndTime];
NSLog(@"\n\nstartDate: %@ endDate: %@", startDate, endDate);
输出:
searchStartTime: 2015-03-05 08:30 AM searchEndTime: 2015-03-05 09:30 AM
startDate: 2015-03-05 13:30:00 +0000 endDate: 2015-03-05 14:30:00 +0000
参见:ICU Formatting Dates and Times
还有:Date Field SymbolTable.
这一切都归结为了解您的格式代码字符串。您在这里误用了 "HH"
,所以时间不对。
另一个问题是您没有捕获错误。通过调用 dateFromString:
,您将错过了解错误的机会。使用getObjectValue:forString:range:error:
学习问题。
无论如何,我在你有 "HH"
的地方替换了 "hh"
,结果是正确的:
NSString* searchStartTime = @"2015-03-05 08:30 AM";
NSString* searchEndTime = @"2015-03-05 09:30 AM";
NSLog(@"\n\nsearchStartTime: %@ searchEndTime: %@",searchStartTime, searchEndTime);
NSDateFormatter* dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat: @"yyyy-MM-dd hh:mm a"];
NSDate* startDate = [dateFormatter dateFromString:searchStartTime];
NSDate* endDate = [dateFormatter dateFromString:searchEndTime];
NSLog(@"\n\nstartDate: %@ endDate: %@", startDate, endDate);
startDate: 2015-03-05 16:30:00 +0000 endDate: 2015-03-05 17:30:00 +0000
我在加利福尼亚,显示的时间是相对于伦敦的时间,所以如果减去时差,您会发现这是正确的。
出于某种原因,这段代码没有正确转换第二个字符串;这是代码:
NSLog(@"\n\nsearchStartTime: %@ searchEndTime: %@",searchStartTime, searchEndTime);
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm a"];
startDate = [dateFormatter dateFromString:searchStartTime];
endDate = [dateFormatter dateFromString:searchEndTime];
NSLog(@"\n\nstartDate: %@ endDate: %@", startDate, endDate);
这是 searchStartTime 和 searchEndTime 的定义和值:
searchStartTime: 2015-03-05 08:30 AM searchEndTime: 2015-03-05 09:30 AM
这是 NSLog 的结果:
startDate: 2015-03-05 08:30:00 +0000 endDate: 2015-03-05 08:30:00 +0000
我这里的代码有什么问题?我想获取这两个 date/time 对象并在 NSPredicate 中使用它们来比较核心数据记录中的日期。
一个错误是 "HH",它是 24 小时制,但您还使用 "a" 作为 & pm。
改为使用 "hh" 表示 12 小时。
示例:
NSString *searchStartTime = @"2015-03-05 08:30 AM";
NSString *searchEndTime = @"2015-03-05 09:30 AM";
NSLog(@"\n\nsearchStartTime: %@ searchEndTime: %@", searchStartTime, searchEndTime);
NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat: @"yyyy-MM-dd hh:mm a"];
NSDate *startDate = [dateFormatter dateFromString:searchStartTime];
NSDate *endDate = [dateFormatter dateFromString:searchEndTime];
NSLog(@"\n\nstartDate: %@ endDate: %@", startDate, endDate);
输出:
searchStartTime: 2015-03-05 08:30 AM searchEndTime: 2015-03-05 09:30 AM
startDate: 2015-03-05 13:30:00 +0000 endDate: 2015-03-05 14:30:00 +0000
参见:ICU Formatting Dates and Times
还有:Date Field SymbolTable.
这一切都归结为了解您的格式代码字符串。您在这里误用了 "HH"
,所以时间不对。
另一个问题是您没有捕获错误。通过调用 dateFromString:
,您将错过了解错误的机会。使用getObjectValue:forString:range:error:
学习问题。
无论如何,我在你有 "HH"
的地方替换了 "hh"
,结果是正确的:
NSString* searchStartTime = @"2015-03-05 08:30 AM";
NSString* searchEndTime = @"2015-03-05 09:30 AM";
NSLog(@"\n\nsearchStartTime: %@ searchEndTime: %@",searchStartTime, searchEndTime);
NSDateFormatter* dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat: @"yyyy-MM-dd hh:mm a"];
NSDate* startDate = [dateFormatter dateFromString:searchStartTime];
NSDate* endDate = [dateFormatter dateFromString:searchEndTime];
NSLog(@"\n\nstartDate: %@ endDate: %@", startDate, endDate);
startDate: 2015-03-05 16:30:00 +0000 endDate: 2015-03-05 17:30:00 +0000
我在加利福尼亚,显示的时间是相对于伦敦的时间,所以如果减去时差,您会发现这是正确的。