Xcode 開発で、前日の日付を使用したいことがありました。
Xcode で、関数等が用意されていれば容易に算出できますが、そのような関数が見つかりません。
この方法では、システム日付(現在時刻)をもとに取得しています。
秒単位で指定することで、過去はマイナス計算をさせてセットします。
Xcode 開発(Objective-c)で、実装することで対処しています。
NSDateFormatter *NsdateFor = [[NSDateFormatter alloc] init]; NsdateFor.dateFormat = @"yyyyMMdd"; //今日 NSString *today = [NsdateFor stringFromDate:[NSDate date]; //前日 NSString *yesterday = [NsdateFor stringFromDate: [NSDate dateWithTimeIntervalSinceNow:-24*60*60]];
Xcode 開発で、指定日の前日を取得したいとき、上記当日日付をもとに対応しようと試みましたが、うまい対処ができないため、古典的なロジックで対応することになりました。(この方法しかないのか調べましたが、回答が見つからないため、以下のロジックで対処しています。)
NSString *sitei_date = @"20180116"; NSString *date_y = [sitei_date substringWithRange:NSMakeRange(0, 4)];//年 NSString *date_m = [sitei_date substringWithRange:NSMakeRange(4, 2)];//月 NSString *date_d = [sitei_date substringWithRange:NSMakeRange(6, 2)];//日 NSInteger date_y2 = [date_y intValue]; //年 数値変換 NSInteger date_m2 = [date_m intValue]; //月 数値変換 NSInteger date_d2 = [date_d intValue]; //日 数値変換 if (date_d2 != 1){ //1日以外 date_d2 = date_d2 - 1; //1日以外は、前日をセット }else{ if (date_m2 != 1){ //1日で1月以外 date_m2 = date_m2 - 1; date_d2 = 31; //前月末を31日でセット if ((date_m2 == 4)||(date_m2 == 6)|| (date_m2 == 9)||(date_m2 == 11)){ //小の月をセットし直す date_d2 = 30; } if (date_m2 == 2){ //2月の対応 date_d2 = 28; if (date_y2 == 2020){ //2020年 閏年 date_d2 = 29; } } }else{ //1月1日のとき 前年大晦日セット date_y2 = date_y2 - 1; date_m2 = 12; date_d2 = 31; } } date_y = [NSString stringWithFormat:@"%04d",date_y2]; //4桁固定 date_m = [NSString stringWithFormat:@"%02d",date_m2]; //2桁固定 date_d = [NSString stringWithFormat:@"%02d",date_d2]; //2桁固定 NSString *date_wk = [date_y stringByAppendingString:date_m]; //年月 NSString *next_date = [date_wk stringByAppendingString:date_d]; //年月日 NSLog(@"xxxx %@",next_date); //確認用
追記2018.01.18
Xcode 開発で、指定日より翌日を算出するロジックは、以下になります。
日付の加算方法により、1週間後、10日後などの設定も可能です。
-(void)tomorrow_sec{ NSString *Wdate_chk = @"20180118"; //指定日 NSString *date_y = [Wdate_chk substringWithRange:NSMakeRange(0, 4)];//年 NSString *date_m = [Wdate_chk substringWithRange:NSMakeRange(4, 2)];//月 NSString *date_d = [Wdate_chk substringWithRange:NSMakeRange(6, 2)];//日 NSInteger date_y2 = [date_y intValue];//年 数値変換 NSInteger date_m2 = [date_m intValue];//月 数値変換 NSInteger date_d2 = [date_d intValue];//日 数値変換 date_d2 = date_d2 + 1;//翌日セット if ((date_m2 == 1)||(date_m2 == 3)||(date_m2 == 5)|| (date_m2 == 7)||(date_m2 == 8)||(date_m2 == 10)){ //大の月 if (date_d2 == 32){ //32日なら翌日とする date_m2 = date_m2 + 1; date_d2 = 1; } } if (date_m2 == 12){ //12月 if (date_d2 == 32){ //32日なら翌年1月1日セット date_y2 = date_y2 + 1; date_m2 = 1; date_d2 = 1; } } if ((date_m2 == 4)||(date_m2 == 6)|| (date_m2 == 9)||(date_m2 == 11)){ //小の月 if (date_d2 == 31){ //31日なら翌日とする date_m2 = date_m2 + 1; date_d2 = 1; } } if (date_m2 == 2){ //2月 if (date_d2 >= 29){ //29日以上のとき if (date_y2 != 2020){ //閏年でない年 date_m2 = date_m2 + 1; date_d2 = 1; }else{ if (date_d2 == 30){ //2020年 date_m2 = date_m2 + 1; date_d2 = 1; } } } } date_y = [NSString stringWithFormat:@"%04d",date_y2]; date_m = [NSString stringWithFormat:@"%02d",date_m2]; date_d = [NSString stringWithFormat:@"%02d",date_d2]; NSString *date_ym = [date_y stringByAppendingString:date_m]; Wdate_chk = [date_ym stringByAppendingString:date_d]; // NSLog(@"xxxx %@",Wdate_chk); }