Pogledajte  na sledećoj web stranici kako se u C# koristi struktura DateTime:  DateTime struktura, rad sa datumima i vremenom u C#-u

U nastavku je deo koji smo koristili na času, a preuzet je sa date web adrese:


Prvi deo časa od 16.11: 

DateTime struktura, rad sa datumima i vremenom u C# programskom jeziku


Za razliku od klase String koja predstavlja rad sa tekstom i klase Math koja predstavlja rad sa matematičkim formulama, DateTime struktura predstavlja rad sa datumima i vremenom. Međutim, DateTime nije klasa već struktura. To znači da DateTime nije referentni tip podataka, već vrednosni tip podataka. To takođe znači, da kad god radite sa datumima; u memoriji se pravi nova instanca strukture DateTime što može uticati na performanse programa. U C# programskom jeziku ne postoji Date tip podataka kao u Visual Basic-u već je Date samo properti strukture DateTime.

ZAPAMTITE: Ako niste sami napravili posebne klase za datum i vreme, za datum i vreme se koristi DateTime struktura u C# programskom jeziku.

DateTime struktura nije nullable tip podataka i ne može da ima vrednost null.  Ukoliko ne izvršite inicijalizaciju strukture DateTime, jednostavno ćete dobiti minimalnu vrednost. Probajte da izvršite sledeći deo koda u vašem programu:

  DateTime date = new DateTime();
Console.WriteLine(date.ToString()); // 1/1/0001 12:00:00 AM Console.WriteLine(DateTime.MaxValue.ToString()); // 12/31/9999 11:59:59 PM   

Kako da inicijalizujemo neki određen datum? 

 
Postoji više načina da se inicijalizuje određeni datum u zavisnosti šta vam konkretno treba.

  date = new DateTime(2016, 1, 14); // Serbian New Year
date = DateTime.Now; // Now
date = DateTime.UtcNow; // UTC
date = DateTime.Today; // Today
date = DateTime.Today.AddDays(-1); // Yesterday
date = DateTime.Today.AddDays(+1); // Tomorrow

Da bi ste prikazali samo vreme bez datuma ili datum bez vremena, tada možete da koristite String formate za određen prikaz ili da koristite propertije strukture DateTime.

  Console.WriteLine("Date: " + date.Date);
Console.WriteLine("Date: " + date.ToString("MM.dd.yyyy")); 
Console.WriteLine("Time: " + date.TimeOfDay);

Console.WriteLine("Time: " + date.ToString("hh:mm:ss"));

Prestupna godina je godina u kojoj mesec Februar ima 29 dana. U principu to je svaka godina deljiva sa 4, ali vi imate metodu IsLeapYear da vam potvrdi da li je godina prestupna.

  Console.WriteLine(DateTime.IsLeapYear(date.Year).ToString());

Svaki unos korisnika sa konzole je tipa string. Tako i datumi u ulazu su tipa string i zbog toga je neophodno da vaš string pretvorite u DateTime strukturu podataka. Za takvu svrhu je najbolje da koristite metodu TryParse, koja će proveriti da li je korisnik ukucao datum ili nije.

Prekucajte sebi sledeći kod programa; skoro u većini programerski poslova će se od vas tražiti da u vašem kodu radite sa vremenom i datumima.

using System;

namespace DateTimeStructure
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("DATETIME STRUCT" + Environment.NewLine);

// Check for DateTime type
Console.Write("Is DateTime value type? ");
Type type = typeof(DateTime);
if (type.IsValueType) Console.WriteLine("True"); else Console.WriteLine("False"); // Result True

// Minimum and Maximum value of the DateTime struct
DateTime date = new DateTime();
Console.WriteLine(Environment.NewLine + "Minimum DateTime value: " + date.ToString()); // 1/1/0001 12:00:00 AM
Console.WriteLine("Maximum DateTime value: " + DateTime.MaxValue.ToString()); // 12/31/9999 11:59:59 PM

// Use Minimum value of DateTime for no date!
Console.Write(Environment.NewLine + "Is there date? ");
if (date == DateTime.MinValue) Console.WriteLine("False"); else Console.WriteLine("True");

// Initialize date
date = new DateTime(2016, 1, 14);
Console.WriteLine(Environment.NewLine + "Initialize date: " + date);
Console.WriteLine("Initialize date for Serbia: " + date.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("sr-SR")));
date = DateTime.Now;
Console.WriteLine(Environment.NewLine + "Day Now: " + date);
date = DateTime.UtcNow;
Console.WriteLine("Day Now UTC: " + date + Environment.NewLine);
date = DateTime.Today;
Console.WriteLine("Today: " + date);
date = DateTime.Today.AddDays(-1);
Console.WriteLine("Yesterday: " + date);
date = DateTime.Today.AddDays(+1);
Console.WriteLine("Tomorrow: " + date);

Console.ReadLine();
Console.Clear();

// Present DateTime Properties
date = new DateTime(date.Year, 1, 1);
Console.WriteLine("First date in 2016 year: " + date);
Console.WriteLine("Is leap year: " + DateTime.IsLeapYear(date.Year).ToString() + Environment.NewLine);

string birth = "9/1/1975 12:15:00 AM";
bool correct = DateTime.TryParse(birth, out date);
if(correct) Console.WriteLine("Manuel's date of birth: " + date);

Console.WriteLine("Date: " + date.ToString("MM.dd.yyyy")); // 9.1.1975
Console.WriteLine("Time: " + date.ToString("hh:mm:ss tt")); // 12:15:00 AM

Console.WriteLine(Environment.NewLine + "Day: " + date.DayOfWeek); // Monday
Console.WriteLine("Day: " + date.Day); // 1
Console.WriteLine("Month: " + date.Month + " or " + date.ToString("MMMM")); // 9 or September
Console.WriteLine("Year: " + date.Year); // 1975

Console.WriteLine(Environment.NewLine + "Hours: " + date.Hour); // 0
Console.WriteLine("Minutes: " + date.Minute); // 15
Console.WriteLine("Seconds: " + date.Second + Environment.NewLine); // 0

TimeSpan old = DateTime.Today - date;
Console.WriteLine("Manuel is " + old.TotalMinutes + " Minutes old."); // 21252945

Console.ReadKey();
}
}
}

Kako to sve izgleda možete pogledati i na video-u:

... (izvor, www.manuelradovanovic.com )

LINKOVI:

Da vidite na zvaničnom Microsoft-ovom sajtu, sve vezano za strukturu DateTime, kliknite ovde .

Da vidite primere (na engleskom jeziku) u kojima se koristi DateTime, kliknite ovde.


deo 2 - DOMAĆI ZADATAK, koji radite za sebe, ali ne za predavanje na platformi - vodite se njime prilikom izrade projekta:

Ovaj deo nismo stigli da uradimo na času pa je to ostavljeno za domaći:

Kreirati klasu Vreme, koristeći uputstvo iz literature:

Stanka Matković, Mijodrag Đurišić: MALA ŠKOLA OBJEKTNO ORIJENTISANOG PROGRAMIRANjA U PROGRAMSKOM JEZIKU C#

(http://elib.mi.sanu.ac.rs/files/journals/nm/238/nm54406.pdf)

Obratite pažnju da su sekunde private, pa vam treba properti, kao i da kreirate konstruktore kako treba (samo prekucajte iz uputstva).

Zatim kreirati klasu Datum, koja omogućava rad sa datumima:

Od metoda pokušajte da kreirate sledeće metode:
* metodu za unos podataka d-dan,m-mesec,g-godina : celi brojevi
* metodu za konstruisanje objekata bez početnih vrednosti postavlja datum na 1.1.1
* metodu za određivanje dana, meseca i godine
* metodu za određivanje da li je godina prestupna
* metoda za određivanje da li je datum ispravan
* metoda za ispis vrednosti u obliku kao 21.1.2007

(Kako se jedan deo toga radi možete pogledati u uputstvu : http://elib.mi.sanu.ac.rs/files/journals/nm/240/nm553407.pdf)

Na kraju, u glavnom programu uraditi sledeće:

Pitati korisnika da unese datum rođenja, a zatim i jedan datum posle toga. Izračunati koliko je minuta prošlo između ta dva datuma.

Ispisati starost korisnika u godinama, danima, satima, minutama

Zatim pitati korisnika da unese neki broj sekundi, pa ispisati koliko je to u minutama, satima i danima

Last modified: Tuesday, 24 November 2020, 9:34 AM