Sök…


Anmärkningar

NSDate är en mycket enkel värdetyp som representerar ett exakt ögonblick i universell tid. Den innehåller inte information om tidszoner, sommartid, kalendrar eller språk.

NSDate är egentligen bara en immutable omslag runt en NSTimeInterval som är en double . Det finns ingen nedbrytbar underklass, som för vissa andra värdetyper i Foundation.

Skapa en NSDate

NSDate klassen tillhandahåller metoder för att skapa NSDate objekt som motsvarar ett givet datum och tid. En NSDate kan initialiseras med den angivna initialiseraren, som:

Returnerar ett NSDate objekt som initialiserats relativt 00:00:00 UTC den 1 januari 2001 med ett visst antal sekunder.

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

NSDate tillhandahåller också ett enkelt sätt att skapa en NSDate lika med det aktuella datumet och tiden:

NSDate *now = [NSDate date];

Det är också möjligt att skapa en NSDate en viss mängd sekunder från aktuellt datum och tid:

NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];

Datumjämförelse

Det finns fyra metoder för att jämföra NSDate i mål-C:

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

Tänk på följande exempel genom att använda två datum, NSDate date1 = July 7, 2016 och NSDate date2 = July 2, 2016 :

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 

Nu NSDate skapas kan de jämföras:

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

Vi kan också använda de earlierDate: och laterDate: metoderna i NSDate klassen:

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.

Slutligen kan vi använda NSDate compare: metod:

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
    }

Konvertera NSDate som är sammansatt från timme och minut (endast) till en fullständig NSDate

Det finns många fall när man har skapat en NSDate från endast en timme- och minutformat, dvs: 08:12

Nackdelen med denna situation är att din NSDate är nästan helt "naken" och vad du behöver göra är att skapa: dag, månad, år, sekund och tidszon för att detta objekt ska "spela med" med andra NSDate-typer.

För exempelets skull låt oss säga att hourAndMinute är NSDate-typen som består av timme- och minutformat:

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];

Nu är ditt objekt den totala motsatsen till att vara "naken".

Konvertera NSDate till NSString

Om ww har NSDate-objekt, och vi vill konvertera det till NSString. Det finns olika typer av datumsträngar. Hur kan vi göra det ?, Det är väldigt enkelt. Bara tre steg.

  1. Skapa NSDateFormatter-objekt
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. Ställ in datumformatet som du vill ha din sträng i.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. Nu får du den formaterade strängen

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

Detta ger utdata något så här: 2001-01-02 at 13:00

Notera:

Att skapa en NSDateFormatter instans är en dyr operation, så det rekommenderas att skapa det en gång och återanvända när det är möjligt.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow