Objective-C Language
NSDate
Zoeken…
Opmerkingen
NSDate
is een zeer eenvoudig waardetype en vertegenwoordigt één exact moment in universele tijd. Het bevat geen informatie over tijdzones, zomertijd, kalenders of landinstellingen.
NSDate
is eigenlijk alleen een onveranderlijke wrapper rond een NSTimeInterval
die een double
. Er is geen veranderlijke subklasse, zoals bij sommige andere waardetypen in Foundation.
Een NSDate maken
De klasse NSDate
biedt methoden voor het maken van NSDate
objecten die overeenkomen met een bepaalde datum en tijd. Een NSDate
kan worden geïnitialiseerd met de aangewezen initializer, die:
Retourneert een
NSDate
object geïnitialiseerd ten opzichte van 00:00:00 UTC op 1 januari 2001 met een bepaald aantal seconden.
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];
NSDate
biedt ook een eenvoudige manier om een NSDate
te maken NSDate
gelijk is aan de huidige datum en tijd:
NSDate *now = [NSDate date];
Het is ook mogelijk om een NSDate
te maken voor een bepaald aantal seconden vanaf de huidige datum en tijd:
NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];
Datum vergelijking
Er zijn 4 methoden voor het vergelijken van NSDate
in Objective-C:
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate
-
- (NSDate *)earlierDate:(NSDate *)anotherDate
-
- (NSDate *)laterDate:(NSDate *)anotherDate
-
- (NSComparisonResult)compare:(NSDate *)anotherDate
Beschouw het volgende voorbeeld met 2 datums, NSDate date1 = July 7, 2016
en 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 de NSDate
zijn gemaakt, kunnen ze worden vergeleken:
if ([date1 isEqualToDate:date2]) {
//Here it returns false, as both dates are not equal
}
We kunnen ook de earlierDate:
en laterDate:
methoden van de klasse NSDate
:
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.
Ten slotte kunnen we de compare:
NSDate
gebruiken:
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
}
Converteer NSDate die is samengesteld uit uur en minuut (alleen) naar een volledige NSDate
Er zijn veel gevallen waarin men een NSDate heeft gemaakt op basis van alleen een uur- en minutennotatie, bijvoorbeeld: 08:12
Het nadeel voor deze situatie is dat uw NSDate bijna helemaal "naakt" is en wat u moet doen is het creëren van: dag, maand, jaar, tweede en tijdzone om dit object te "meespelen" met andere NSDate-types.
Laten we voor het voorbeeld zeggen dat hourAndMinute het type NSDate is dat is samengesteld uit uren- en minutennotatie:
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 is je object het tegenovergestelde van 'naakt' zijn.
NSDate converteren naar NSString
Als we een NSDate-object hebben en we dit willen converteren naar NSString. Er zijn verschillende soorten datumreeksen. Hoe we dat kunnen doen ?, Het is heel eenvoudig. Slechts 3 stappen.
- Maak een NSDateFormatter-object
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- Stel de datumnotatie in waarin u uw string wilt.
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
Download nu de opgemaakte string
NSDate *date = [NSDate date]; // your NSDate object NSString *dateString = [dateFormatter stringFromDate:date];
Dit geeft de output zoiets als dit: 2001-01-02 at 13:00
Notitie:
Het maken van een NSDateFormatter
instantie is een dure bewerking, dus het wordt aanbevolen om deze eenmaal te maken en indien mogelijk opnieuw te gebruiken.