システムの現在の日付から配列で過去 7 日間 (例: 金、木、水、火、月、日、土、金) が必要です。 .
4 に答える
私の2セント:
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"EEE"];
NSDate *now = [NSDate date];
NSMutableArray *results = [NSMutableArray arrayWithCapacity:8];
for (int i = 0; i < 8; i++)
{
NSDate *date = [NSDate dateWithTimeInterval:-(i * (60 * 60 * 24)) sinceDate:now];
[results addObject:[dateFormatter stringFromDate:date]];
}
NSLog(@"%@", results);
このようにして、ローカライズされた曜日名を取得し、それらの配列を自分で作成する必要はありません。
そのままで、あなたが求めていたものを正確に提供します。
ははは、私が他の作業をしている間にたくさんの回答が得られましたが、ほとんど終わったので、とにかくここにあります。このアプローチは、時間の変更などでも機能し、ローカライズされた曜日名を提供します。(他の多くの例のように時間値を減算している場合、時間の変更に近い場合、時間が変更されたときに問題が発生します....)
// Subtract one day from the current date (this compensates for daylight savings time, etc, etc.)
- (NSDate *)dateBySubtractingOneDayFromDate:(NSDate *)date {
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *minusOneDay = [[NSDateComponents alloc] init];
[minusOneDay setDay:-1];
NSDate *newDate = [cal dateByAddingComponents:minusOneDay
toDate:date
options:NSWrapCalendarComponents];
return newDate;
}
- (NSArray *)lastSevenDays {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE"];
NSDate *date = [NSDate date];
NSMutableArray *weekDays = [[NSMutableArray alloc] initWithCapacity:8];
for (int i = 0; i > -8; i--) {
NSString *weekDay = [formatter stringFromDate:date];
[weekDays addObject:weekDay];
date = [self dateBySubtractingOneDayFromDate:date];
}
return weekDays;
}
// To use it, do this:
NSLog(@"%@", [self lastSevenDays]);
/*
* Results:
* (
* Fri,
* Thu,
* Wed,
* Tue,
* Mon,
* Sun,
* Sat,
* Fri
* )
*
*/
これは一般的なプログラミングの質問であり、iOS 環境に固有のものではないと想定しています。私の仮定が間違っている場合は、この回答を無視してください。
曜日を含む配列を作成します。今日の日のインデックスを見つけます。配列を逆方向にループし、コンテンツを作成中の配列にコピーします。ゼロになったら、インデックスを 6 に設定し (ゼロ ベースの配列を想定)、今日の曜日にループ バックします。
このように (このコードは概念的なものです):
string[] days = {"Mon", "Tues" .... "Sun"};
string[] last8Days = new string[8];
int daysIndex, last8DaysIndex;
daysIndex = \\some code to get the index of today's day.
for (last8DaysIndex = 0; last8DaysIndex < 8; last8DaysIndex++)
{
last8Days[last8DaysIndex] = days[daysIndex];
daysIndex--;
if(daysIndex < 0)
daysIndex = 6;
}
お役に立てれば。
この StackOverflow の投稿が最も役立つと思います。
曜日を確認する方法 (つまり、火曜日、金曜日?) と 2 つの NSDates を比較する方法は?
そこにあるCan Berk Güderの回答を参照してください。曜日を取得する方法に役立つ場合があります。
これには NSDateComponents を使用できます。
符号なしユニット = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [グレゴリオ成分:日付からの単位:日付]; 次に、次のように日付の個々の部分にアクセスできます。
[コンポーネント年]; [構成月]; [部品日]; または、NSCalendar の dateFromComponents メソッドを使用して新しい NSDate オブジェクトを作成し、2 つの NSDate オブジェクトを比較することもできます。
現在の日付から過去 7 日間を取得するロジックを取得する方法については、以下の投稿も参照してください。
今日、昨日、今週、先週、今月、先月の NSDate を取得する...変数
Ben Sの回答を参照してください:
日付と時刻のプログラミングガイドから適応:
// Right now, you can remove the seconds into the day if you want NSDate *today = [NSDate date]; // All intervals taken from Google NSDate *yesterday = [today dateByAddingTimeInterval: -86400.0]; NSDate *thisWeek = [today dateByAddingTimeInterval: -604800.0]; NSDate *lastWeek = [today dateByAddingTimeInterval: -1209600.0]; // To get the correct number of seconds in each month use NSCalendar NSDate *thisMonth = [today dateByAddingTimeInterval: -2629743.83]; NSDate *lastMonth = [today dateByAddingTimeInterval: -5259487.66];
月に応じて正確な正確な日数が必要な場合は、
NSCalendar
.
また、 hanatによる同じ投稿で同様に素晴らしい回答を参照できます。
これを書くためのより良い方法かもしれませんが、ここで私がベンのNSCalendarの提案に出くわし、そこからNSDateComponentsに取り組んでいます
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];
[components setHour:-[components hour]];
[components setMinute:-[components minute]];
[components setSecond:-[components second]];
NSDate *today = [cal dateByAddingComponents:components toDate:[[NSDate alloc] init] options:0]; //This variable should now be pointing at a date object that is the start of today (midnight);
[components setHour:-24];
[components setMinute:0];
[components setSecond:0];
NSDate *yesterday = [cal dateByAddingComponents:components toDate: today options:0];
components = [cal components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[[NSDate alloc] init]];
[components setDay:([components day] - ([components weekday] - 1))];
NSDate *thisWeek = [cal dateFromComponents:components];
[components setDay:([components day] - 7)];
NSDate *lastWeek = [cal dateFromComponents:components];
[components setDay:([components day] - ([components day] -1))];
NSDate *thisMonth = [cal dateFromComponents:components];
[components setMonth:([components month] - 1)];
NSDate *lastMonth = [cal dateFromComponents:components];
NSLog(@"today=%@",today);
NSLog(@"yesterday=%@",yesterday);
NSLog(@"thisWeek=%@",thisWeek);
NSLog(@"lastWeek=%@",lastWeek);
NSLog(@"thisMonth=%@",thisMonth);
NSLog(@"lastMonth=%@",lastMonth);
これがお役に立てば幸いです。