Ky është ndoshta një problem në zonën tuaj kohore. Vini re se kur analizoni një datë pa kohë, koha supozohet të jetë zero. Megjithatë, disa orare specifike nuk ekzistojnë, zakonisht për shkak të ndryshimeve të orës së diellit (që ndodhin në mars në mbarë botën) ose për shkak të ndryshimeve specifike të orës lokale.
Për shembull, në Jordani, ndryshimi i DST është Apr 1 2016, 00:00 => Apr 1 2016, 01:00
. Kjo do të thotë se koha Apr 1 2016, 00:00
nuk ekziston sepse March 31 2016, 23:59
bëhet menjëherë Apr 1 2016, 01:00
. Nëse data nuk ekziston, formatuesi i datës duhet të kthejë nil
.
Zakonisht mund ta rregulloni problemin duke përdorur një zonë kohore të paracaktuar GMT që nuk e ka këtë problem, p.sh
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
or
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone systemTimeZone].secondsFromGMT];
Vini re se duke qenë se nuk po analizoni kohën, ndryshimet në zonën kohore nuk duhet të ndikojnë tek ju.
Hapat për të riprodhuar
Cakto zonën kohore në kompjuterin tënd në zonën orare Jordan:
NSString *dateString = @"2016-04-01";
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init];
parsingFormatter.dateFormat = @"yyyy-MM-dd";
NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "(null)"
me rregullimin e zonës kohore:
NSString *dateString = @"2016-04-01";
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init];
parsingFormatter.dateFormat = @"yyyy-MM-dd";
parsingFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "2016-04-01 00:00:00 +0000"
31.03.2016
NSDateFormatter
dhe kjo do të thotë të përdorniNSDate
. Sigurisht, do të kërkohet përdorimi i së njëjtës zonë kohore për të dy formatuesit. 31.03.2016