4 Mart 2018 Pazar

DateTime Struct

Giriş
DateTime bir sınıf değil bir struct yani alanları her zaman bir değere atanmak zorunda. DateTime sistem saatini döner.

DateTime sınıfı saat dilimi ve locale hakkında bilgiye sahip değildir. SQLServer'da DATETIME veya SMALLDATETIME tipinde saklanır.

Constructor
Metodun imzası şöyle.
public DateTime(
    int year,
    int month,
    int day,
    int hour,
    int minute,
    int second
)
Bilinen bir tarihe göre kurabiliriz.
DateTime dt = new DateTime(1970, 1, 1);
Constructor - ticks
Açıklaması şöyle
ticks Type: System.Int64
A date and time expressed in the number of 100-nanosecond intervals that have elapsed since January 1, 0001 at 00:00:00.000 in the Gregorian calendar.
Örnek
Şöyle yaparız.
TimeSpan myTimeSpan = ...;
DateTime dt= new DateTime (myTimeSpan.Ticks);
Örnek
Şöyle yaparız.
long value = 635872032000000000L;

DateTime result = new DateTime(value);
Constructor - year + month + day + calendar
Julien takvime göre kurabiliriz.
DateTime dt = new DateTime(year, month, day, new JulianCalendar());
Add metodu
TimeSpan veya AddXXX metodları ile ileri alınabilir. Açıldığından beri geçen saniyeleri sayan bir cihazın ne kadar zamandır açık olduğunu yine Add() metodu kullanılarak bulunur.
TimeSpan timeOfDay = TimeSpan.FromSeconds( 43200 );
DateTime dt = DateTime.Today.Add( timeOfDay );
AddDays metodu
Geçtiğimiz cumartesi gece yarısı şöyle bulunur.
DateTime today = DateTime.Today;
int datediff = today.DayOfWeek - DayOfWeek.Saturday;
DateTime Saturday = today.AddDays(-datediff);
lblSaturday.Text = Saturday.ToString();
veya şöyle
DateTime time = ...;
int dayOfWeek = (int)time.DayOfWeek;
DateTime saturdaySundayMidnight = time.AddDays(-dayOfWeek).Date;
AddSeconds metodu
Şöyle yaparız
int seconds = 43200;
DateTime dt = DateTime.Today.AddSeconds(seconds);
AddTicks metodu
Tick olarak ileri alırız.

Date Alanı
Nesnenin saat alanını 0 olarak verir.
DateTime justDate = DateTime.Now.Date;
Bu kod aslında şununla aynıdır.
DateTime justDate = DateTime.Today;
Saat 0 olsa bile toString metodu saati şöyle gösterir.
{12/01/2016 00:00:00}

Sadece günü şöyle gösteririz.
var str = dt.Date.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
DaysInMonth metodu - year + month
Şöyle yaparız.
DateTime.DaysInMonth(2017,1);
DayOfWeek Alanı
Nesnenin haftanın kaçıncı gününü temsil ettiğini belirtir. Gün int'e şöyle çevrilir.
DayOfWeek startWeekEnum = DateTime.Now.DayOfWeek;
int startWeek = ((int)startWeekEnum);
Tanımlı sabitlerle karşılaştırmak için şöyle yaparız.
if (dt.DayOfWeek != DayOfWeek.Sunday) {...}
Şöyle yaparız.
if (dt.DayOfWeek == DayOfWeek.Friday) {...}
FromAODate metodu - double
double'dan DateTime tipine çevirmek için kullanılır. DateTime nesnesini tekrar double'a çevirmek için ToAODate() metodu kullanılır. Bu mtodu Excel günlerini okumak için kullanılır.
Örnek
Şöyle yaparız
var dt = DateTime.FromOADate(dDouble );
Örnek
Şöyle yaparız.
DateTime dt = DateTime.FromOADate(39938);
Örnek
Şöyle yaparız.
DateTime dt = DateTime.FromOADate(table.Rows[i].Field<double>(2));
Kind Alanı
Üç tane değer alır. Unspecified, Local ve Utc. DateTime.Now bu alana Local değerini atar.

MinValue Alanı
Geçersiz bir değeri belirtir. Yani 1/1/0001 12:00:00 AM değeridir.
DateTime.MinValue
Now Alanı
Açıklaması şöyle
The Now property returns a DateTime value that represents the current date and time on the local computer. Note that there is a difference between a DateTime value, which represents the number of ticks that have elapsed since midnight of January 1, 0001, and the string representation of that DateTime value, which expresses a date and time value in a culture-specific-specific format.
SŞimdiki zamanı temsil eder. Nesnenin Tick ve Hour, Minute gibi alanları yerel zamana göre atanır. Anladığım kadarıyla bu alan UtcNow alanına yerel zaman dilimini ekleyerek bulunuyor.
Console.WriteLine(DateTime.Now);
Windows 7 ve 8'de bu metod 15 milisaniye geçmeden arka arkaya çağırırsak aynı Ticks değerini alırız. Çünkü sistem saatinin çözünürlüğü çok fazla değil.

operator - metodu
Subtract metodunu kullanmaktan daha kolay. Şöyle yaparız.
var diffInSeconds = (dateTime1 - dateTime2).TotalSeconds;
Parse metodu
DateTime Parse Metodları yazısına taşıdım.

ParseExact metodu
DateTime Parse Metodları yazısına taşıdım.

SpecifyKind metodu
Parse metodları saat dilimini bilmeyebilir.
DateTime convertedDate = DateTime.Parse(dateStr);
var kind = convertedDate.Kind; // will equal DateTimeKind.Unspecified
Bu durumda şöyle yaparız.

DateTime convertedDate = DateTime.SpecifyKind(
    DateTime.Parse(dateStr),
    DateTimeKind.Utc);

var kind = convertedDate.Kind; // will equal DateTimeKind.Utc
Subtract metodu
İki DateTime nesnesinin farkı alınır. Fark 2 gün, 3 saat gibi bir şekilde çıkar.
DateTime d1 = ...;
DateTime d2 = ...;
TimeSpan diff = d1.Subtract(d2);
Ticks Alanı
Her Tick 100 nanosaniyeyi temsil eder.
dt.Ticks;
Bu alanın güncellenmesi 10 ms. kadar sürebiliyor. Dolayısıyla arka arkaya çağrılarda aynı değeri görebiliriz.

ToAODate metodu
Şöyle yaparız.
double dStarttime = dt.ToOADate();
Today Alanı
Bugünün ilk başını yani gece yarısını temsil eder.
DateTime dt = DateTime.Today;
ToLocalTime metodu
Utc saatten yerel saate çevirir.
DateTime dt = utcDate.ToLocalTime();
ToLongDateString metodu
DateTime ToString Metodları yazısına taşıdım

ToShortDateString metodu
DateTime ToString Metodları yazısına taşıdım

ToString metodu
DateTime ToString Metodları yazısına taşıdım

TryParse metodu
DateTime Parse Metodları yazısına taşıdım.

TryParseExact metodu
DateTime Parse Metodları yazısına taşıdım.

ToUniversalTime
Yerel saatten Utc saate çevirir.
DateTime localDateTime = ...; 
DateTime utcDateTime = localDateTime.ToUniversalTime();
UtcNow Alanı
UTC zamanını temsil eder. Nesnenin Tick ve Hour, Minute gibi alanları yerel UTC saatine göre atanır.
DateTime.UtcNow

Temporal Adjustment Örnekleri
Bir sonraki ayın son gününü bulmak
Şöyle yaparız. Önce bu ayın ilk gününü buluruz. Sonra 2 ay ekleriz. 1 gün çıkararak sonraki ayın son gününü buluruz.
DateTime reference = DateTime.Now;
DateTime firstDayThisMonth = new DateTime(reference.Year, reference.Month, 1);
DateTime firstDayPlusTwoMonths = firstDayThisMonth.AddMonths(2);
DateTime lastDayNextMonth = firstDayPlusTwoMonths.AddDays(-1);
DateTime endOfLastDayNextMonth = firstDayPlusTwoMonths.AddTicks(-1);
En Yakın Ayın Son Gününü Bulmak
Şöyle yaparız.
// Names adjusted to follow .NET naming conventions
public static DateTime FindNearestEndOfMonth(DateTime date)
{
    int year = date.Year;
    int month = date.Month;
    int daysInMonth = DateTime.DaysInMonth(year, month);
    return date.Day >= daysInMonth / 2
        // End of current month
        ? new DateTime(year, month, daysInMonth)
        // End of previous month
        : new DateTime(year, month, 1).AddDays(-1);
}
İki Tarih Aralığı Kontrolü
Bugünün Pazartesi 17:45 ile Çarşamba 18:00 arasında düşüp düşmediğini şöyle buluruz.
Haftanın ilk gününü buluruz. Bugünden haftanın ilk gününü çıkarırız. Eğer fark 1 gün 17 saat 45 dakika ile 3 gün 18 saat arasında ise istenilen aralıktadır.
DateTime time = DateTime.Today;
int dayOfWeek = (int)time.DayOfWeek;
DateTime saturdaySundayMidnight = time.AddDays(-dayOfWeek).Date;
TimeSpan timeOfWeek = time.Subtract(saturdaySundayMidnight);
TimeSpan  startTime = new TimeSpan(1,17,45,0);  //Monday 5:45PM
TimeSpan  endTime = new TimeSpan(3,18,0,0);  //Wednesday 6:00PM

if ((timeOfWeek >= startTime) && (timeOfWeek <= endTime))
{
  Console.WriteLine("In Range");
}

Hiç yorum yok:

Yorum Gönder