-->

如何获得的NSDate为00:00 [NSDate的日期]的一天吗?(How to get NSDa

2019-06-25 16:08发布

我需要一个NSDate对象为00:00从[NSDate的日期(一天的开始),比方说,如果当前是上午11:30(由返回[NSDate的日期]),于01/06/2012,现在我需要有一个NSDate为00:00 AM上01/06/2012。

我没有试过,但究竟是在我心目中是:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
NSDate *morningStart = [calendar dateFromComponents:components];

所以,我首先得到当前日期(说它是01/06/2012),构建NSDateComponent的日期,然后我设置时/分/秒到0和年/月/日不应该被改变(即01 / 06/2012),然后创建一个NSDate此组件的设置,我可以得到00:00:00 01/06/2012日期?

Answer 1:

你在做什么是正确的,但是当你的NSLog morningStart日期将显示在GMT时区

如果你想确保日期正确,将其转换为的NSString

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 [formatter setDateFormat:@"yyyy-MMM-dd HH:mm:ss"];
 NSString *strFromDate = [formatter stringFromDate:morningStart]; // this will return 2012-Jun-21 00:00:00


Answer 2:

转换的NSDate到的NSString会很有帮助,但如果你需要保持的NSDate对象进行进一步的处理,这里是您的解决方案让您真正morningStart的NSDate对象设置00:00:00时,谨慎的时区,以及...正如你将看到你不是从溶液中至今:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:now];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
int timeZoneOffset = [destinationTimeZone secondsFromGMTForDate:now] / 3600;
[components setHour:timeZoneOffset];
[components setMinute:0];
[components setSecond:0];
NSDate *morningStart = [calendar dateFromComponents:components];


Answer 3:

这很容易使用要做到这一点在iOS8上startOfDayForDate

let date = NSDate() 
let calendar = NSCalendar.currentCalendar(calendarIdentifier: NSGregorianCalendar)
let dateAtStartOfDay = calendar.startOfDayForDate(date)

OR如下可能做到这一点在斯威夫特的传统方式:

let date = NSDate()
let calendar = NSCalendar.currentCalendar(calendarIdentifier: NSGregorianCalendar)
// Use a mask to extract the required components from today's date
let components = calendar.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: date)
let dateAtStartOfDay = calendar.dateFromComponents(components)!
print(dateAtStartOfDay) 

注:NSDates相对于GMT存储,因此, print将显示相对本地时间时区的明确认识是使用NSDates正确必不可少的。)



文章来源: How to get NSDate for 00:00 on the day of [NSDate date]?