Programim dhe zhvillim, javascript, python, php, html

Gabim kur përpiqeni të analizoni datën në Objektivi-C

Kur po përpiqesha të konvertoja April from 04 (MM)Apr (MMM), u kthye në nil, a është ky një problem i njohur në iOS apo po bëj diçka të gabuar?

Këtu është kodi im për inspektim:

NSString *dateString=@"2016-04-01";
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate* myDate = [dateFormatter dateFromString:dateString];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
NSLog(@"%@ == %@",dateString,stringFromDate);

kur ndryshimi dataString=@"2015-04-01", stringFromDate kthen Apr

Ky është rezultati im:

ky është imazhi i regjistrit

2016-04-01 12:17:45.708[32172:2389414] 2016-04-01 == (nul)

2016-04-01 12:17:47.446[32172:2389414] 2015-04-01 == Prill

31.03.2016

  • Pse nuk po regjistroni myDate? dateFromString është shumë më i zgjedhur se stringFromDate, kështu që myDate ka më shumë gjasa që të jetë problemi. 31.03.2016
  • Do të kontrolloja për karaktere të padukshme në vargun tuaj. 31.03.2016
  • Në cilin shtet jeni? Kjo do të na ndihmonte të gjejmë zonën specifike kohore që po përdorni. 31.03.2016
  • @Sulthan Si do të kishte ndonjë efekt zona kohore këtu? Duket krejtësisht e parëndësishme. 31.03.2016
  • objekti myDate është zero .. e provova kodin tani, zona ime kohore është GMT+2 .. sonte do të jetë +3 btw 31.03.2016
  • @Eiko Shih përgjigjen time. Për shembull, ndryshimi i DST në Jordan ndodh April 1 20160:00, prandaj kjo kohë e saktë nuk ekziston (23:59 bëhet 1:00). 31.03.2016
  • @gnasher729 myDate kthehet zero kur dateString =@2016-04-01; 31.03.2016
  • Të gjitha këto probleme lindin sepse po përdorni një lloj të gabuar të dhënash. Një NSDate është më shumë se një datë, është një pikë në kohë. Është pak a shumë nën specifikuar mënyra se si e ndërtoni, duke e mbushur me parazgjedhje, të cilat mund të rezultojnë në një datë të pavlefshme, pra zero. 31.03.2016

Përgjigjet:


1

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: fut përshkrimin e imazhit këtu

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
  • jo njeri, diçka nuk është në rregull me analizën, duke e dhënë objektin myDate si zero! 31.03.2016
  • @AhmedAwad dhe e provove kodin tim? Vini re se duhet ta shtoni para analizës. 31.03.2016
  • Vini re se kjo në përgjithësi mund të mos japë gjithmonë rezultatin e pritur, kur të dy formatuesit e datave kanë zona të ndryshme kohore të vendosura. Ky me të vërtetë nuk është një rast për NSDate, është për komponentët e datës. :) 31.03.2016
  • @Eiko Kjo është e vërtetë, por nëse hyrja juaj është një varg (p.sh. data që vjen nga serveri), atëherë nuk keni vërtet një mundësi për të shmangur NSDateFormatter dhe kjo do të thotë të përdorni NSDate. Sigurisht, do të kërkohet përdorimi i së njëjtës zonë kohore për të dy formatuesit. 31.03.2016

  • 2

    Provova kodin tënd dhe më jep null për vitin 2022, por vitet 2018,2020 më jep Prill ... të çuditshme!

        NSString *dateString=@"2022-04-01";
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"+5:30"]];
    [dateFormatter setDateFormat:@"MMM"];
    NSString *stringFromDate = [dateFormatter stringFromDate:myDate];
    NSLog(@"%@ == %@",dateString,stringFromDate);
    

    fut përshkrimin e imazhit këtu

    PËRDITËSIM:

    Ju lutemi analizoni vargun si ky: 01-04-2016 01:00

    Për shkak të kursimit të ditës në Jordani, ora do të zhvendoset +1 orë kështu që nuk ka kohë në univers si kjo: 2016-04-01 00:00

    Kjo duhet të zgjidhë problemet tuaja me objektin zero.

    31.03.2016
  • objekti myDate është zero djema.. pse është zero?! 31.03.2016
  • shtoni këtë zonë kohore [NSTimeZone timeZoneForSecondsFromGMT:0]; sipas përgjigjes sulltan, provoni një herë 31.03.2016
  • e provova, nuk ndikon asgjë pasi objekti myDate është zero për disa arsye :( 31.03.2016
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..