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.

  1. Maak een NSDateFormatter-object
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
  1. Stel de datumnotatie in waarin u uw string wilt.
    dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
  1. 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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow