我有一个NSDate,我希望零小时,分钟和秒。我想要的结果是:2014-02-19 00:00:00 +0000
。我尝试过以下方法:
NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents* components = [[NSCalendar currentCalendar] components:flags fromDate:self.birthDatePicker.date];
NSDate* birthDate = [[NSCalendar currentCalendar] dateFromComponents:components];
出于某种原因,我得到了这个:2014-02-19 23:00:00 +0000
。小时不归零。我还尝试设置[components setHour:0]
。但是我得到了相同的结果23
几个小时。关于我做错了什么的任何想法?
答案 0 :(得分:3)
看看这个图书馆:https://github.com/mysterioustrousers/MTDates
我遇到了类似的问题,我决定使用它。它有很多与日期相关的功能。你需要的是:
- (NSDate *)mt_startOfCurrentDay;
关于时区。 NSDate独立于时区格式。您需要的时区可以在NSDateFormatter实例中指定。
更新完整代码示例
NSDate *date = [NSDate date];
NSLog(@"%@", date); // 2014-02-20 11:11:40 +0000
[NSDate mt_setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSLog(@"%@", [[date mt_startOfCurrentDay] mt_stringFromDateWithISODateTime]); // 2014-02-20 00:00:00 +0000
对于其他日期格式,请使用时区和自定义日期格式设置NSDateFormatter
另一个解决方案这个没有库:
NSDate *date = [NSDate date];
NSLog(@"%@", date); // 2014-02-20 11:36:20 +0000
NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:currentCalendar.calendarIdentifier];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDateComponents* components = [calendar components:flags fromDate:date];
date = [calendar dateFromComponents:components];
NSLog(@"%@", date); // 2014-02-20 00:00:00 +0000
P.S。顺便说一下,我有GMT + 3时区
答案 1 :(得分:2)
在NSDate上考虑此类别:
@interface NSDate (Utilities)
- (NSDate *) dateAtStartOfDay;
@end
@implementation
- (NSDate *) dateAtStartOfDay
{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekdayOrdinalCalendarUnit) fromDate:self];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
@end
代码取自Erika Sadun NSDate Extension
答案 2 :(得分:0)
始终乐于助人:
WWDC视频
2011 Session 117 - Performing Calendar Calculations
2013 Session 227 - Solutions to Common Date and Time Challenges
这包含您可能需要的信息:
会话 227 @ 13m25s ,“常用操作”/“计算午夜”。