În obiectivul C, pentru a obține ora și minutul curent ca întregi, trebuie să folosim NSDateComponents și NSCalendar?

Aș dori să obțin curentul și minutul ca întregi. Deci, dacă acum este ora 3:16, aș dori să obțin cele două numere întregi: 3 și 16.

Dar se pare că [NSDate date] va da numărul de secunde din 1970 sau poate da un șir de reprezentare a timpului curent, dar nu există o modalitate ușoară de a le obține ca întregi?

Văd o postare în Obținerea timpului curent , dar implică NSDateComponents și < code> NSCalendar ? Asta e prea complicat ... tot ce era nevoie este ceva de genul

NSDate *date = [NSDate date];
int hour = [date getHour];    //which is not possible

Există o modalitate mai simplă decât folosirea a 3 clase NSDate , NSDateComponents și NSCalendar pentru a obține ora curentă ca un întreg sau, -C, vom folosi în mod obișnuit codurile localtime și tm pentru a obține ora ca număr întreg?

0
Am verificat referința și cred că nu există altă cale în acest sens. NSDate pare să fie doar numărul de secunde.
adăugat autor nhahtdh, sursa
Ați putea adăuga un catalog pe NSDate și îl extindeți pentru a calcula metoda GetHour utilizând câteva secunde până la data de calcule, sunteți dispus să faceți asta?
adăugat autor Omar Abdelhafith, sursa

3 răspunsuri

Modul în care interpretați secvențele din 1970 depinde de calendarul pe care îl utilizați. Pur și simplu nu există altă opțiune. Din fericire, nu este dificil de configurat. Consultați "Ghidul de programare pentru date și ore" pentru o mulțime de exemple. In cazul tau:

// Assume you have a 'date'
NSCalendar *gregorianCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComps = [gregorianCal components: (NSHourCalendarUnit | NSMinuteCalendarUnit)
                                              fromDate: date];
// Then use it
[dateComps minute];
[dateComps hour];

Deci, într-adevăr, nu este așa de complicat.

De asemenea, rețineți că ați putea crea o "Categorie de clasă" pentru a încapsula acest lucru ca:

 @interface NSDate (MyGregorianDateComponents)
  - (NSInteger) getGregorianHour;
  - (NSInteger) getGregorianMinute;
  @end
0
adăugat
Citiți din nou întrebarea. Există o legătură.
adăugat autor Adam, sursa

NSDate just holds the time that has passed since a certain reference date, to get more meaningful numbers out of this (eg. after taking care of DST, leap years and all the other stupid time stuff), you have to use NSDateComponents with the appropriate NSCalendar.

0
adăugat
este adevărat ... sau dacă poate fi NSDateComponents dateComponents = [NSDateComponents forLocalTime]
adăugat autor ???????, sursa
La început am crezut că Calendarul este ca un fel de clasă lunară/programare lunară, dar se dovedește că este pentru "calendarul pentru diferite culturi" (11 calendaristic diferit de acum) ... deci este destul de profund și util. , poate că poate exista o metodă convenabilă pentru sistemul calendaristic cel mai des utilizat pentru NSDateComponents, dar presupun că odată ce sunteți familiarizați cu toate cele trei clase, acestea sunt destul de puternice
adăugat autor ???????, sursa
@ KenThomases mai bine! +1
adăugat autor user523234, sursa
+1 Bună explicație
adăugat autor Adam, sursa
Pentru al pune într-un alt mod, un NSDate se referă la un moment dat. Acest moment poate fi cunoscut sub numele de 3:16 am unde sunteti, dar acelasi moment poate fi cunoscut ca 18:16 sau chiar 12:46 in alt loc. Nu este nimic despre momentul singur care corespunde cu "3:16 am", trebuie să specificați și o fus orar și un calendar.
adăugat autor Ken Thomases, sursa
@ user523234 Yup, explicația KenThomases este fel mai bună! O rușine că el nu va obține nici o reputație pentru comentariu.
adăugat autor JustSid, sursa

My class can help. https://github.com/TjeerdVurig/Vurig-Calendar/blob/master/Vurig%20Calendar/NSDate%2Bconvenience.m

Sunt sigur că poți să-ți dai seama de partea din minut :)

0
adăugat
de altfel, mai târziu, se pare că NSDateComponents dorea steagurile de biți, astfel încât să poată da datele necesare printr-un calcul unic, în loc să calculeze totul o dată pentru ceas și apoi să calculeze din nou pentru minut
adăugat autor ???????, sursa
Da, sunt de acord că ar fi mai bine pentru această situație
adăugat autor Tjeerd in 't Veen, sursa
iOS dezvoltatori, România — Moldova
iOS dezvoltatori, România — Moldova
21 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro, @seo_ro Android: @ro_android