Help us understand the problem. What is going on with this article?

指定した日付は第何週なのか調べてみる

More than 3 years have passed since last update.

指定した日付が第何週目にあたるのか調べてみました。

用途としては「2015-02-02T00:00:00+00:00」とJSONで複数日付が渡され、

それぞれが第何週目のグループに分けられればよいのかを調べるために使います。

まずString型で日付が渡ってくるのでNSDate型にする必要があります。

Objective-cやり始めたころに作ったメソッドがあったのでそれを流用します。

NSString→NSDate
-(NSDate*)remakeDate:(NSString*)day{
    day = [day stringByReplacingOccurrencesOfString:@"\n" withString:@""];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterFullStyle];
    [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
    NSDate *remakeDay = [dateFormatter dateFromString:day];
    if(!remakeDay){
        [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mmZZZZ"];
        remakeDay = [dateFormatter dateFromString:day];
    }
    if(!remakeDay){
        [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
        remakeDay = [dateFormatter dateFromString:day];
    }
    return remakeDay;
}

第何週目か確認したい日付のリストはテスト用に以下のように準備しておきます。

NSArray *dayList = [NSArray arrayWithObjects:
                    [self remakeDate:@"2015-02-02T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-05T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-12T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-14T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-16T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-17T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-18T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-20T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-21T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-22T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-26T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-27T00:00:00+00:00"],
                    [self remakeDate:@"2015-02-28T00:00:00+00:00"],
                    nil];

上記のリストをログに出力しながら確認してみます。

NSDateComponents* components = [[NSDateComponents alloc] init];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekOfMonthCalendarUnit;
for (int i = 0; i<[dayList count]; i++) {
    components = [calendar components:flags fromDate:[dayList objectAtIndex:i]];
    NSLog(@"%ld年%ld月%ld日は第%ld週目です。"   ,(long)[components year]
                                            ,(long)[components month]
                                            ,(long)[components day]
                                            ,(long)[components weekOfMonth]);
}

出力した結果は以下のようになりました。

2015年2月2日は第1週目です。
2015年2月5日は第1週目です。
2015年2月12日は第2週目です。
2015年2月14日は第2週目です。
2015年2月16日は第3週目です。
2015年2月17日は第3週目です。
2015年2月18日は第3週目です。
2015年2月20日は第3週目です。
2015年2月21日は第3週目です。
2015年2月22日は第4週目です。
2015年2月26日は第4週目です。
2015年2月27日は第4週目です。
2015年2月28日は第4週目です。

いじょーです!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away