Comparare data din NSDate,fara timp
Trimis: 05 Februarie 2011 11:44 AM
[ Ignoră ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
Stie cineva cum pot compara o data cu o alta din 2 obiecte NSDate? Ma intereseaza doar data fara timp.
Am incercat sa extrag data dar data rezultata este de “ieri” cu o zi mai putin decat trebuie:
NSDate * now = [NSDate date] ; unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ; NSCalendar * calendar = [NSCalendar currentCalendar] ; NSDateComponents * components = [calendar components : unitFlags fromDate : now] ; NSDate * theDate = [calendar dateFromComponents : components] ; NSLog (@ "%@" , theDate );
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 09:33 AM
[ Ignoră ]
[ # 1 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
mie imi pare corecta ziua (azi zice 7 Feb):
cristi : tmp diciu $ cat test . m #import <Cocoa/Cocoa.h> int main () { NSAutoreleasePool * pool = [NSAutoreleasePool new] ; NSDate * now = [NSDate date] ; unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ; NSCalendar * calendar = [NSCalendar currentCalendar] ; NSDateComponents * components = [calendar components : unitFlags fromDate : now] ; NSDate * theDate = [calendar dateFromComponents : components] ; NSLog (@ "%@" , theDate ); [pool release] ; } cristi : tmp diciu $ gcc test . m - framework Cocoa cristi : tmp diciu $ ./ a . out 2011 - 02 - 07 10 : 31 : 55.279 a . out[57548 : 903] 2011 - 02 - 07 00 : 00 : 00 + 0200
Trimis: 07 Februarie 2011 12:48 PM
[ Ignoră ]
[ # 2 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
Mie imi apare ora asta: 2011-02-06 22:00:00 +0000
Ar trebui sa verific undeva setarile xCode? In mod normal nu ar trebui setarile sa le ia automat din date & time prefferences?
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 12:55 PM
[ Ignoră ]
[ # 3 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
0/ logheaza si NSDate *now = [NSDate date];
ce valoare are now ?
1/ N-are treaba cu setari, ar trebui ca NSCalendar, NSDate, etc (oricum cred ca toate is wrapper peste gettimeofday) sa mearga cu timpul de sistem (ala de-l vezi in Sys Prefs)
2/ Ai timezone setat pe GMT (+0000)?
3/ Daca in Terminal.app rulezi date , ce-ti arata?
cristi :~ diciu $ date Mon Feb 7 13 : 50 : 16 EET 2011
Trimis: 07 Februarie 2011 01:03 PM
[ Ignoră ]
[ # 4 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
In terminal imi arata asa:
MacBook-Pro:~ bbb$ date
Mon Feb 7 14:01:36 EET 2011
NSDate *now = [NSDate date]; are valoarea 2011-02-07 12:02:36 +0000,adica GMT nu GMT + 2.
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 01:06 PM
[ Ignoră ]
[ # 5 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
Bizar - de acolo is alea doua ore (daca la 22:00 adaugi 2 ore) face fix miezul noptii pe 7 Feb.
Ce SDK folosesti - ala de Mac OS X sau ala de iPhone?
Cumva rulezi in simulator?
Trimis: 07 Februarie 2011 01:07 PM
[ Ignoră ]
[ # 6 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
Pe mine de fapt ce ma intereseaza,utilizatorul alege o data din UIDatePicker,data o pot afisa corect folosind NSDateFormatter.
Problema este ca la ora 00:00 ziua urmatoare vreau in viewDidLoad sa pot verifica daca NSDate *now = [NSDate date]; va fi >1 decat data aleasa de utilizator.
Iar ora 00:00 sa fie ora din setarile iphone-ului…
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 01:08 PM
[ Ignoră ]
[ # 7 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
diciu - 07 Februarie 2011 01:06 PM
Bizar - de acolo is alea doua ore (daca la 22:00 adaugi 2 ore) face fix miezul noptii pe 7 Feb.
Ce SDK folosesti - ala de Mac OS X sau ala de iPhone?
Cumva rulezi in simulator?
xCode 3.2.5,simulatorul pentru iPhone.
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 01:08 PM
[ Ignoră ]
[ # 8 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
O fi de la simulator care nu ia in seama timezone-ul.
Ia ruleaza pe device - ar trebui sa dispara problema.
Trimis: 07 Februarie 2011 01:17 PM
[ Ignoră ]
[ # 9 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
Foarte ciudat,am rulat si pe device iar in consola [NSDate date] apare tot 2011-02-07 12:15:38 +0000
iar dateComponent apare 2011-02-06 22:00:00 +0000.
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 01:21 PM
[ Ignoră ]
[ # 10 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
Bun, deci telefonul (device-ul) este setat pe GMT.
Ia logheaza [[NSCalendar currentCalendar] timeZone].
Trimis: 07 Februarie 2011 01:24 PM
[ Ignoră ]
[ # 11 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
Am mai verificat odata,e ok: Europe/Bucharest (GMT+02:00) offset 7200
La tine in consola [NSDate date] ce valoare are?
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 01:33 PM
[ Ignoră ]
[ # 12 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
boboc - 07 Februarie 2011 01:24 PM
Am mai verificat odata,e ok: Europe/Bucharest (GMT+02:00) offset 7200
La tine in consola [NSDate date] ce valoare are?
Ba nu e ok deloc.
La tine NSDate merge pe GMT si NSCalendar merge pe GMT+2.
De aici ai diferenta - poti sa faci [calendar setTimezone…] dar nu cred ca asta-i rezolvarea corecta. Mai citeste prin documentia de NSCalendar - ceva e incorect in codul ala desi n-am idee ce.
La mine (Mac OS X SDK, n-am iOS) NSDate si NSCalendar sunt pe acelasi timezone (ala din sistem):
2011 - 02 - 07 14 : 27 : 54.446 a . out[996 : 903] now : 2011 - 02 - 07 14 : 27 : 54 + 0200 2011 - 02 - 07 14 : 27 : 54.459 a . out[996 : 903] timezone : Europe / Bucharest ( GMT + 02 : 00 ) offset 7200
Trimis: 07 Februarie 2011 02:18 PM
[ Ignoră ]
[ # 13 ]
Moderator
Din: Cluj-Napoca
Macuser din: 26.01.06
2011 - 02 - 07 15 : 15 : 57.809 datetest[3924 : 20b] 2011 - 02 - 07 15 : 15 : 57 + 0200 2011 - 02 - 07 15 : 15 : 57.810 datetest[3924 : 20b] 2011 - 02 - 07 00 : 00 : 00 + 0200
la mine afiseaza bine in simulator, primul e “now”
Semnătură
M cintoshing…
Trimis: 07 Februarie 2011 02:20 PM
[ Ignoră ]
[ # 14 ]
Sr. Member
Din: Bucuresti
Macuser din: 22.09.06
La mine nu inteleg care e problema…
Daca folosesc NSDateFormatter imi afisaza corect dar daca afisez un NSDate direct cu NSLog imi apare GMT,adica -2 ora noastra.
Semnătură
A man should look for what is, and not for what he thinks should be.—Albert Einstein
Trimis: 07 Februarie 2011 02:38 PM
[ Ignoră ]
[ # 15 ]
Member
Din: Bucuresti
Macuser din: 11.10.05
Si la mine pe simulator data e relativ la GMT.
O rezolvare (cam idioata), e fortarea calendarului la TZ-ul de GMT:
NSDate * now = [NSDate date] ; unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ; NSCalendar * calendar = [NSCalendar currentCalendar] ; [calendar setTimeZone : [NSTimeZone timeZoneForSecondsFromGMT : 0]] ; NSDateComponents * components = [calendar components : unitFlags fromDate : now] ; NSDate * theDate = [calendar dateFromComponents : components] ;
Rezolvarea este idioata pentru ca “stie” ca pe iOS NSDate nu ia in seama timezone-ul local.
Cred totusi ca pe undeva e un bug in iOS.