2009-06-29 16 views
12

私は何の日(つまり月曜日、金曜日...)任意の日付の(つまり、6月27日、2009)ココア

を把握しようとしているを使用して、任意の日付の曜日を見つける方法ありがとうございました。

+0

のObjective-CとCocoaの違いを区別してみてください。 1つを他のものなしで使用することは完全に実現可能ですが、日付の場合、私はあなたがココアについて話していると仮定します。 – dreamlax

+0

これらは別個のエンティティですが、Objective-CをCocoaなしで使用する方が、間違いなく簡単です。たとえPythonやその他のものからCocoaを使用するとしても、クラスとメソッド呼び出しはまったく同じです。また、 "objective-c"タグはJavaやC#と同じくらいアクティブではありません。このタグを見ている人は、MacやiPhoneのプログラミングに興味があります。 –

+0

未編集の質問をお読みですか?それはココアへの言及を全く作らなかったので、編集とコメント。 C++やSTL、C#、.NETなどと同じように区別することが重要だと思います。 – dreamlax

答えて

6

NSCalendarとNSDateComponentsを使用します。 NSDateComponentsドキュメントに示されているように:

NSCalendar *gregorian = [[NSCalendar alloc] 
initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *date = [gregorian dateFromComponents:comps]; 
NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:date]; 
int weekday = [weekdayComponents weekday]; 
+1

"comps"はどこから来たのですか?また、技術的に@ThisThibは、-weekdayがNSInteger値を返すことは間違いありません。私が知っているどのカレンダーでも問題ではないはずですが、正しさと移植性という名前で... ;-) –

16

NSDateクラスとNSCalendarクラスがあります。 は、たとえば、herehere

は、彼らが次のコードを提供します。

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] 
         initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *weekdayComponents = 
       [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today]; 
NSInteger day = [weekdayComponents day]; 
NSInteger weekday = [weekdayComponents weekday]; 
28

を私が行ってきた:

NSDateFormatter* theDateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
[theDateFormatter setDateFormat:@"EEEE"]; 
NSString *weekDay = [theDateFormatter stringFromDate:[NSDate date]]; 

これはどのようにあなたがしたいあなたが選択させるの追加ボーナスを持っています返される平日のように(setDateFormatで日付書式文字列を変更することによって):

形成:

http://developer.apple.com/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369

-1

は、ここで私が意図したとおりに機能している、と巻き取るものです。それは、日付を取る日が月の最初になるように変更し、その日のを取得します。

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:date]; 
NSDateComponents *monthDateComponents = [[NSCalendar currentCalendar] components: NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear | 
             NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond fromDate: date]; 

// build date as start of month 
monthDateComponents.year = components.year; 
monthDateComponents.month = components.month; 
monthDateComponents.day = 1; 

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
// [gregorian setFirstWeekday:1]; 

NSDate *builtDate =[gregorian dateFromComponents: monthDateComponents]; 
// NSDateComponents *weekdayComponents =[gregorian components: NSCalendarUnitWeekday fromDate: builtDate]; 

NSDateFormatter *df = [NSDateFormatter new]; 
[df setDateFormat:@"E"]; 

NSString *firstDay = [df stringFromDate:builtDate]; 
if([firstDay isEqual:@"Sun"]) // do for the other 6 days as appropriate 
    return 7;