繁体   English   中英

Objective-C / iOS:获取特定日期(星期日)的日期

[英]Objective-C/iOS: Get date for specific day in week (sunday)

我需要在当周获得特定日期(星期日)的日期。 我使用这个日期来确定是否应该进行一些每周重置,并且我在上次重置日期之前进行一些计算是在周日日期之前等。这主要是多次询问和回答,并且我的解决方案已经工作了6个月。 但是今天,2013年12月29日,它停止了工作。

目前使用的功能:

+ (NSDate *) getSundaysDate{
    NSDate *currentDate  = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [gregorian setFirstWeekday:1];

    NSDateComponents *components = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekCalendarUnit)  fromDate:currentDate];

    NSDateComponents *dt = [[NSDateComponents alloc]init];
    [dt setWeek:[components week]];
    [dt setWeekday:1];
    [dt setMonth:[components month]];
    [dt setYear:[components year]];

    return [gregorian dateFromComponents:dt];
}

这曾经像魅力一样工作,但今天,在我的应用程序上,它返回:

NSLog(@"sundaysDate %@", [Util getSundaysDate]);
sundaysDate 2012-12-29 23:00:00 +0000
NSLog(@"Current date %@", [[NSDate date] debugDescription]);
Current date 2013-12-29 11:37:23 +0000

请注意2012年。

我知道在不同的情况下已经多次回答,所以我提前道歉,但我根本没有得到2012年。

编辑 - 只是为了澄清所需的功能:

周从星期日开始(第1天)

周在星期六(第7天)结束

鉴于当前日期,我需要一周中第一天的日期。

Example 1: today is 29th December 2013
Expected: Sunday is 29th December 2013

Example 2: today is 4th January 2014
Expected: Sunday was 29th December 2013

Example 2: today is 8th January 2014
Expected: Sunday was 5th January 2014

我想你需要使用WeekOfMonth而不是Week
NSWeekCalendarUnit基本上是一年中的一周,因此指定它和月份都存在冲突。

请注意, NSWeekCalendarUnit已过时:

弃用声明
请改用weekOfYearweekOfMonth ,具体取决于您的意图。

NSDate *currentDate  = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setFirstWeekday:1];

NSDateComponents *components = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit)  fromDate:currentDate];
[components setWeekday:1];

NSDate *sundatsData = [gregorian dateFromComponents: components];
NSLog(@"sundaysDate: %@", sundatsData);

NSLog输出:

sundaysDate:2013-12-29 05:00:00 +0000

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM