iphone - NSDate/NSDateComponent 问题

标签 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;
}

你能帮忙吗?

非常感谢,

吕克

最佳答案

我想应该会容易很多

- (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;
}

请注意,此解决方案假设一周的第一天是星期一。

关于iphone - NSDate/NSDateComponent 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259089/

相关文章:

ios - 某些日期的 NSDateformatter 问题

ios - 在 iOS 中查找两个日期的差异

iphone - 如何关联UIKit,Core Image,Quartz 2D和iOS中的各种框架?

iphone - TableView 中的延迟响应

ios - NSDATE 到日期时间选择器

iphone - 两个日期之间缺少月份名称

objective-c - 在 Objective-C 中,要以整数形式获取当前的小时和分钟,我们需要使用 NSDateComponents 和 NSCalendar?

ios - 如何将两个 NSDate 格式化为时差字符串(例如 2 天前)并使其遵循设备的区域格式?

iphone - 如何在 Mac 上模拟慢速互联网连接 (Edge/3g)。有火狐浏览器插件吗?

ios - 没有状态栏的导航栏与iOS 11中的安全区域重叠