Luc*_*Luc 2 iphone nsdate nsdatecomponents
假设我们是15/07/2010,我想获得前一周的第一天,也就是7月5日.我有以下方法,但它不起作用.似乎我的工作日属性有问题......
+ (NSDate *)getFirstDayOfPreviousWeek
{
// Get current date
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
// Get today date at midnight
NSDateComponents *components = [cal components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSTimeZoneCalendarUnit) fromDate:now];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
NSInteger *dayNbr = [components weekday];
NSLog(@"week day:%@",dayNbr); // CRASH
NSDate *todayMidnight = [cal dateFromComponents:components];
// Get first day of previous week midnight
components = [[[NSDateComponents alloc] init] autorelease];
NSInteger *wd = [dayNbr intValue] * -1 + 1;
[components setWeekDay:wd];
[components setWeek:-1];
NSDate *newDate = [cal dateByAddingComponents:components toDate:todayMidnight options:0];
[cal release];
NSLog(@"new date:%@", newDate);
return newDate;
}
Run Code Online (Sandbox Code Playgroud)
能否请你帮忙 ?
非常感谢,
吕克
我觉得应该容易多了
- (NSDate *)getFirstDayOfPreviousWeek
{
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now = [NSDate date];
NSLog(@"Current date: %@", now);
// required components for today
NSDateComponents *components = [cal components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit ) fromDate:now];
// adjust them for first day of previous week (Monday)
[components setWeekday:2];
[components setWeek:([components week] - 1)];
// construct new date and return
NSDate *newDate = [cal dateFromComponents:components];
NSLog(@"New date: %@", newDate);
return newDate;
}
Run Code Online (Sandbox Code Playgroud)
请注意,此解决方案假设一周的第一天是星期一.
| 归档时间: |
|
| 查看次数: |
6941 次 |
| 最近记录: |