3

参考预先回答的问题:获取本周的第一天和最后一天

上面的链接有两个答案。其中一个是理论上的,另一个是一种称为 PyObjC(Python-Objective C 桥接语言)的语言,快速谷歌搜索确认 PyObjC 不适用于 iPhone SDK。

所以关于这个问题,如何将 PyObjC 代码翻译成与 iPhone SDK 兼容。

目标:假设今天(周二)是 19 日,周日。是 17 日(一周开始)和星期六。23 日是周末。我想得到一个像 19/01 - 23/01 这样的字符串 [ie The start of week (hypen) end of week]

4

4 回答 4

7

如果您有NSDate,您可以使用 currentNSCalendar来检索该日期的NSDateComponents. 将NSDateComponents's设置weekday为 1(一周的第一天),创建一个副本,并将副本设置weekday为 7(一周的最后一天)。然后使用NSCalendar将两者都转换NSDateComponents回各自的NSDate对象,之后您可以使用 anNSDateFormatter创建您的字符串表示形式。

此链接有一个关于如何获取日期的工作日的示例:https ://stackoverflow.com/questions/1057349#1057405

于 2010-01-17T20:53:20.100 回答
3

这是一些代码,它还检查了一个边缘情况,即上个月开始的一周:

// Finds the date for the first day of the week
- (NSDate *)getFirstDayOfTheWeekFromDate:(NSDate *)givenDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Edge case where beginning of week starts in the prior month
    NSDateComponents *edgeCase = [[NSDateComponents alloc] init];
    [edgeCase setMonth:2];
    [edgeCase setDay:1];
    [edgeCase setYear:2013];
    NSDate *edgeCaseDate = [calendar dateFromComponents:edgeCase];

    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:edgeCaseDate];
    [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
    [components setWeek:[components week]];

    NSLog(@"Edge case date is %@ and beginning of that week is %@", edgeCaseDate , [calendar dateFromComponents:components]);

    // Find Sunday for the given date
    components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:givenDate];
    [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
    [components setWeek:[components week]];

    NSLog(@"Original date is %@ and beginning of week is %@", givenDate , [calendar dateFromComponents:components]);

    return [calendar dateFromComponents:components];
}

编辑:上面的相关代码

- (NSDate *)firstDayOfWeekFrom:(NSDate *)givenDate {
  NSCalendar *calendar = [NSCalendar currentCalendar];

  NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:givenDate];
  [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
  [components setWeekOfYear:[components weekOfYear]];

  return [calendar dateFromComponents:components];
}
于 2013-02-04T14:22:22.333 回答
0

这是我几天前一直在寻找的,终于找到了。有一种方法rangeOfUnit:startDate:interval:forDate:NSDate并以简单的方式做到这一点。您可以在以下位置查看详细信息: 当前周开始和结束日期

于 2013-05-06T05:28:10.017 回答
0
NSDate *weekDate = [NSDate date];
NSCalendar *myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *currentComps = [myCalendar components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekOfYearCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:weekDate];
int ff = currentComps.weekOfYear;
NSLog(@"1  %d", ff);

[currentComps setWeekday:1]; // 1: sunday
NSDate *firstDayOfTheWeek = [myCalendar dateFromComponents:currentComps];
[currentComps setWeekday:7]; // 7: saturday
NSDate *lastDayOfTheWeek = [myCalendar dateFromComponents:currentComps];

NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init];
myDateFormatter.dateFormat = @"dd EEEE";
NSString *firstStr = [myDateFormatter stringFromDate:firstDayOfTheWeek];
NSString *secondStr = [myDateFormatter stringFromDate:lastDayOfTheWeek];

NSLog(@"first - %@ \nlast - %@", firstStr, secondStr);
于 2014-04-11T12:10:35.013 回答