Am continua să traduc „mici minuni.“. După o trilogie de succes - serie. Articolul original.
Încă o dată, permiteți-mi să vă scufundați în „mici miracole .NET“ - aceste mici „lucruri“ în limbile claselor .NET Framework și BCL, care fac mai ușor de dezvoltare prin îmbunătățirea lizibilității, mentenanței și performanța.
Azi am de gând să se concentreze pe System.DateTime. Această structură mică a fost în BCL de la bun început, este utilizat pe scară largă pentru a reprezenta cazuri de data și ora. Ea are multe proprietati minunate, metode, și operatorii care nu pot fi la fel de larg cunoscute, dar ele vă pot oferi mai multe beneficii.
Doar o scurtă notă despre constructorul implicit
Una dintre primele caracteristici care observa tranzițional c Java la C # este faptul că constructorul implicit pentru DateTime nu returnează ora curentă, iar cea minimă.
De ce se întâmplă acest lucru? De ce să nu se întoarcă data și ora curentă? Punctul cheie aici este faptul că structura este DateTime. Structura a fost aleasă din motive de performanță, pentru a face copii de DateTime este foarte ușor, dar una dintre multele consecinte ale acestui fapt este că nu se poate determina comportamentul structurii din constructorul implicit. Structura de constructor implicit inițializează întotdeauna toate domeniile de valorile curente (zero pentru tipurile numerice, null pentru tipuri de referință, etc.).
Deoarece valorile curente ale tuturor câmpurilor de structură sunt valorile implicite, deci utilizați la crearea DateTime constructor implicit vă oferă un caz în care valoarea dateData zero. Aceasta înseamnă că numărul de cicluri (mai mici de 62 de biți) sunt zero, iar tipul (de sus 2 biți), este de asemenea zero. Acest decalaj zero de la valoarea minimă a DateTime și de tip nespecificat.
Ora curentă, dar ce?
Dacă doriți să obțineți data și ora locală curentă, cel mai simplu mod este de a utiliza un DateTime.Now câmp static.
Acesta este utilizat pe scară largă pentru a produce data și ora locală, dar dacă lucrăm în mai multe zone de timp, ne-am putea dori să folosească timp UTC pentru a avea independență de cazare. În acest caz, trebuie să ne numim:
DateTime.UtcNow returnează data și ora curentă, dar în loc de a folosi fusul orar local, le prezintă ca un timp UTC. Foarte important, unele dintre proprietățile pe care doriți să le utilizați, deoarece va stabili cei doi biți pentru a dateData, care determină tipul de ora si data. Ne putem întreba cu ușurință aceste două biți de sperietoare, cu un fel de proprietate:
Designeri cu DateTimeKind
Acum, folosind sau UtcNow, putem seta biții de Sperietoare dateData corect, dar ce se întâmplă dacă doriți să decidă data și ora (de exemplu, pentru a reprezenta anumite sărbători sau evenimente din calendar cheie)? Multi designeri sunt supraîncărcate, astfel încât să ofere o opțiune suplimentară DateTimeKind:
Trebuie remarcat faptul că un constructor care ia numai anul, luna și ziua nu este un parametru DateTimeKind. Dacă doriți să definiți o instanță DateTime, conține doar o dată (fără o valoare de timp), în contextul UTC sau local, este mai bine ca acest lucru să explicit:
Când aveți nevoie de o dată sau o oră, dar nu atât împreună
De multe ori proiectarea, avem nevoie doar de o dată sau o componentă de timp. Există mai multe caracteristici utile care vă pot ajuta să obțineți rapid la ele.
Nu este nevoie de a construi manual noi cazuri de DateTime:
În primul rând, există o proprietate statică de astăzi, care ne dă o DateTime de data curentă, la miezul nopții, ora locală. Sau, dacă aveți DateTime instanță, și doriți numai data sau componenta de timp, puteți utiliza proprietatea Data sau TimeOfDay respectiv.
Data de proprietate returnează o nouă instanță care conține data inițială la momentul miezul nopții (zero ore, minute și secunde), TimeOfDay proprietate returnează o instanță perioadă de timp care conține timpul instanței originale (îl puteți trimite ca un offset de la miezul nopții sursa originală).
Operațiuni cu DateTime
Cele mai multe dintre voi știți că putem compara cazuri DateTime cu operatorii de comparație tradiționale (<, <=,>,> =, ==. =) Sau prin compareTo () metodă. Dar, de asemenea, putem adăuga și scădea instanțe DateTime.
Rețineți că DateTime este imuabil, ceea ce înseamnă că de fiecare dată când o nouă instanță este creat atunci când se ocupă cu DateTime. Dar, ca datetime - o structură cu un singur domeniu, costurile asociate sunt extrem de scăzute, și nu ar trebui să ia în considerare acest factor.
Adaugarea la instanta DateTime posibil folosind Perioadă de timp Adăugați metoda () și operatorul +. Poate fi pozitiv Durata de timp sau negativ (echivalent negativ la interval de timp adăugarea unei scăderi pozitive interval de timp, și vice-versa).
Dacă nu aveți nevoie de un complet si interval de timp doriți doar să adăugați (sau scade), componentele individuale, puteți utiliza metode Helper Adăugați. () Pentru zile, ore, ani, etc.
Rețineți că metoda Add. () Este metodele legate de scãdere. (). În cazul metodei Add. () Dacă aveți nevoie pentru a scădea zile, ore, luni, etc. trebuie doar să adăugați valoare negativă.
Structura DateTime are multe avantaje. În ciuda faptului că este o foarte ușor și productiv în același timp puterea sa este asigurată de operațiunile pe care le susține.