サーチ…


備考

NSDateは、非常に単純な値型で、世界時の1つの正確な瞬間を表します。タイムゾーン、夏時間、カレンダー、ロケールに関する情報は含まれていません。

NSDateは実際にはNSTimeInterval周りの不変ラッパーで、 doubleです。 Foundationには他の値型のように、変更可能なサブクラスはありません。

NSDateの作成

NSDateクラスは、指定された日付と時刻に対応するNSDateオブジェクトを作成するためのメソッドを提供します。指定されたイニシャライザを使用してNSDateを初期化することができます。

2001年1月1日00:00:00 UTCを基準にして秒数で初期化されたNSDateオブジェクトを返します。

NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];

NSDateは、現在の日付と時刻に等しいNSDateを簡単に作成する方法も提供します:

NSDate *now = [NSDate date];

現在の日付と時刻から指定された秒数だけNSDateを作成することもできます。

NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];

日付比較

Objective-CのNSDateを比較する方法は4つあります。

  • - (BOOL)isEqualToDate:(NSDate *)anotherDate
  • - (NSDate *)earlierDate:(NSDate *)anotherDate
  • - (NSDate *)laterDate:(NSDate *)anotherDate
  • - (NSComparisonResult)compare:(NSDate *)anotherDate

2つの日付、 NSDate date1 = July 7, 2016 NSDate date2 = July 2, 2016 NSDate date1 = July 7, 2016 2日を使用する次の例を考えてみましょう。

NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;

NSDateComponents *comps2 = [[NSDateComponents alloc]init];
    comps.year = 2016;
    comps.month = 7;
    comps.day = 2;

NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016 
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016 

NSDateが作成されたので、それらを比較することができます:

if ([date1 isEqualToDate:date2]) {
    //Here it returns false, as both dates are not equal
}

NSDateクラスのearlierDate:およびlaterDate:メソッドを使用することもできます。

NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.

最後に、 NSDatecompare:メソッドを使用することができます:

NSComparisonResult result = [date1 compare:date2];
    if (result == NSOrderedAscending) {
        //Fails
        //Comes here if date1 is earlier than date2. In our case it will not come here.
    }else if (result == NSOrderedSame){
        //Fails
        //Comes here if date1 is the same as date2. In our case it will not come here.
    }else{//NSOrderedDescending
        
        //Succeeds
        //Comes here if date1 is later than date2. In our case it will come here
    }

時と分(のみ)から完全なNSDateに構成されたNSDateを変換する

時と分のフォーマット、つまり08:12からNSDateを作成したケースはたくさんあります。

この状況の欠点は、あなたのNSDateがほぼ完全に "裸"であることと、このオブジェクトが他のNSDateタイプと "一緒に遊ぶ"ために、日、月、年、秒、およびタイムゾーンを作成することです。

この例では、hourAndMinuteは時および分形式で構成されたNSDate型です。

NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
                                                         fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
                                                                     fromDate:[NSDate date]];

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];

NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];

今あなたのオブジェクトは「裸」になっているのとは全く反対のものです。

NSDateをNSStringに変換する

wwがNSDateオブジェクトを持っていて、それをNSStringに変換したい場合さまざまなタイプの日付文字列があります。私たちはそれをどのようにすることができますか?それはとても簡単です。ちょうど3つのステップ。

  1. NSDateFormatterオブジェクトの作成
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. 文字列が必要な日付形式を設定します。
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. さて、フォーマットされた文字列を取得する

     NSDate *date = [NSDate date]; // your NSDate object
     NSString *dateString = [dateFormatter stringFromDate:date];
    

これにより、次のような出力が得られます2001-01-02 at 13:00

注意:

NSDateFormatterインスタンスの作成はコストのかかる操作なので、一度作成して可能な限り再利用することをお勧めします。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow