hzx*_*zxu 12 iphone nsdate nscalendar nsdatecomponents
我需要从[NSDate日期] 00:00(当天开始)获取NSDate对象,假设当前是上午11:30(由[NSDate日期]返回),在01/06/2012,现在我需要在01/06/2012 00:00 am获得NSDate.
我没试过这个,但我的想法是:
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];
Run Code Online (Sandbox Code Playgroud)
所以我首先获得当前日期(比如说它是01/06/2012),并为日期构建一个NSDateComponent,然后我将小时/分钟/秒设置为0,并且不应更改年/月/日(即01)/06/2012)然后我为这个组件设置创建一个NSDate,我可以得到00:00:00 01/06/2012的日期吗?
Oma*_*ith 10
你做的是正确的,但是当你在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
Run Code Online (Sandbox Code Playgroud)
将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];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6604 次 |
| 最近记录: |