1

システムの現在の日付から配列で過去 7 日間 (例: 金、木、水、火、月、日、土、金) が必要です。 .

4

4 に答える 4

5

私の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);

このようにして、ローカライズされた曜日名を取得し、それらの配列を自分で作成する必要はありません。

そのままで、あなたが求めていたものを正確に提供します。

于 2012-04-13T17:22:39.670 に答える
2

ははは、私が他の作業をしている間にたくさんの回答が得られましたが、ほとんど終わったので、とにかくここにあります。このアプローチは、時間の変更などでも機能し、ローカライズされた曜日名を提供します。(他の多くの例のように時間値を減算している場合、時間の変更に近い場合、時間が変更されたときに問題が発生します....)

// 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
 * )
 * 
 */
于 2012-04-13T17:36:46.937 に答える
1

これは一般的なプログラミングの質問であり、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;
}

お役に立てれば。

于 2012-04-13T16:30:42.510 に答える
0

この 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);

これがお役に立てば幸いです。

于 2012-04-13T17:22:53.490 に答える