1 din 2
1
Comparare data din NSDate,fara timp
  [ Ignoră ]
Avatar
RankRankRankRank
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 componentsunitFlags fromDatenow];
    
NSDate *theDate [calendar dateFromComponentscomponents];
    
    
NSLog(@"%@",theDate); 
 Semnătură 

A man should look for what is, and not for what he thinks should be.—Albert Einstein

Profil
 
  [ Ignoră ]   [ # 1 ]
Avatar
RankRankRank
Member
Din: Bucuresti
Macuser din: 11.10.05

mie imi pare corecta ziua (azi zice 7 Feb):

cristi:tmp diciucat 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 componentsunitFlags fromDatenow];
    
NSDate *theDate [calendar dateFromComponentscomponents];
    
    
NSLog(@"%@",theDate); 
    
[pool release];
}
cristi
:tmp diciugcc test.-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 
Profil
 
  [ Ignoră ]   [ # 2 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 3 ]
Avatar
RankRankRank
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:~ diciudate
Mon Feb  7 13
:50:16 EET 2011 
Profil
 
  [ Ignoră ]   [ # 4 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 5 ]
Avatar
RankRankRank
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?

Profil
 
  [ Ignoră ]   [ # 6 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 7 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 8 ]
Avatar
RankRankRank
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.

Profil
 
  [ Ignoră ]   [ # 9 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 10 ]
Avatar
RankRankRank
Member
Din: Bucuresti
Macuser din: 11.10.05

Bun, deci telefonul (device-ul) este setat pe GMT.
Ia logheaza [[NSCalendar currentCalendar] timeZone].

Profil
 
  [ Ignoră ]   [ # 11 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 12 ]
Avatar
RankRankRank
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] now2011-02-07 14:27:54 +0200
2011
-02-07 14:27:54.459 a.out[996:903] timezoneEurope/Bucharest (GMT+02:00offset 7200 
Profil
 
  [ Ignoră ]   [ # 13 ]
Avatar
RankRankRankRank
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ă 

Mcintoshing…

Profil
 
  [ Ignoră ]   [ # 14 ]
Avatar
RankRankRankRank
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

Profil
 
  [ Ignoră ]   [ # 15 ]
Avatar
RankRankRank
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 componentsunitFlags fromDatenow];
    
NSDate *theDate [calendar dateFromComponentscomponents]

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.

Profil
 
   
1 din 2
1