Rad sa vremenom i datumom
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).
* 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