2011-10-25 7 views
2

現在の週を取得する必要のあるアプリを開発します。私はこれを試しました:objective-cの現在の週の番号を取得するには?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSString *dateString = @"1-1-2011"; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
    NSDate *dateFromString = [[NSDate alloc] init]; 
    dateFromString = [dateFormatter dateFromString:dateString]; 
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *comp = [gregorian components:NSWeekCalendarUnit fromDate:dateFromString]; 
    NSLog(@"%d", comp.week); 

    [dateFormatter release]; 
} 

しかし、それは私に52を示しています。実際には間違った結果です。私に何か考えを提案してください。 ありがとうございます。

+0

年が土曜日に始まるのはどうですか?今週は最初のことではありません。前年の最後= 52週目です:)。 – JakubKnejzlik

+0

@GrizzlyNetch:ISO-8601の番号付けでは前年の52番目です。それは、米国の番号付けでは初めてのことです。それから、米国の週は日曜日から始まるという事実があります。そして明らかに物事をもっと混乱させるだけの周りには、いくつかの週番号システムがあります:http://en.wikipedia.org/wiki/Seven-day_week#Week_numbering(おそらく、週番号はDSTに悩むという点で唯一のものです – millimoose

答えて

5

週の日付は、どの番号付け標準が使用されているかによって異なります。たとえば、ISO-8601規格のdefines week 1を「年の最初の木曜日の週」とします。

は、2011年1月の最初は、次の週は、2011年の第1週たことを意味土曜日だった、27.12.2010-2.1.2011週52週また

2010を作る、のためのいくつかの非互換の規格があります週が始まるか終わるか、年の数はどのように数えられますか。これにより、週番号は日付範囲を指定する混乱しやすい方法となり、日付範囲を使用しないようにするための最善の解決方法となります。

ドキュメントからNSCalendarには、setMinimumDaysInFirstWeek:を使用して週数を調整することもできます。

+0

dateStringの値を@ "03-01-2011"に変更しようとしましたが、NSLogは1週間と表示します。どこで正確にsetMinimumDaysInFirstWeekを定義すればよいですか?たぶん私は現在の日付をどこかに定義すべきでしょうか? – Noobass

+0

「最初の1週間の最小日数」は、特定の年からその年の1週間に何日かかるかを意味します。私はそれを1に設定すると、1月の場合でも、1月の最初は1週目になると仮定しています。 NSCalendarインスタンスを作成した後は、setterメソッドを呼び出す必要があります。 – millimoose

+0

2011年1月の3分の1は月曜でした。それは2011年の1週目に何の気分もない週番号付け基準に属します。 – millimoose

関連する問題