Objective-C Language
NSDate
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.
- Skapa NSDateFormatter-objekt
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- Ställ in datumformatet som du vill ha din sträng i.
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
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.