C# Yıl, Ay ve Haftanın İlk ve Son Gününü Nasıl Buluruz? dersimiz ile C# derslerimize devam ediyoruz. Bu dersimizin konusu kısaca tarih işlemleridir. Raporlamaya dayalı bir proje yaptığımızda yada projemizde bir raporlama ekranı yapacak olduğumuzda bu bilgiler bize çok gerek olmaktadır. Bu dersimizde de tarih işlemleri ile bu bilgileri nasıl alacağımızı göreceğiz. Kodları vermeye başlayalım.
C# hakkındaki diğer derslerim için tıklayabilirsiniz.
Yılın ilk ve son gününü bulmak
//Yılın ilk ve son günü DateTime dt_Yil_ilkGun = new DateTime(DateTime.Now.Year, 1, 1); // Yılın ilk günü DateTime dt_Yil_sonGun = dt_Yil.AddYears(1).AddDays(-1); // Yılın son günü
Tarih işlemleri arasında belkide en basit olanıdır.. Şuanın tarih bilgisi içerisinden yılı alıyoruz. Bu yıl bilgisi ile yeni bir datetime değişkeni oluşturup yılın ilk gününü bu değişkene atıyoruz. Bu oluşturduğumuz değişkenle yılın ilk gününü elde etmiş oluyoruz.
Yılın son gününü ise elde ettiğimiz tarihe tarih gün ekleme ile bir yıl ekleyip tarih gün çıkarma ile bir gün çıkartıyoruz. Bu şekilde de yılın son gününü elde etmiş oluyoruz. :)
Ayın ilk ve son gününü bulmak
//Ayın ilk ve son günü DateTime dt_Ay_ilkGun = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); // Ay ilk günü DateTime dt_Ay_sonGun = dt_Ay .AddMonths(1).AddDays(-1);// Ay son günü
Tarih işlemleri arasında en gerekli olan bilgilerden birisi de ayın ilk ve son gününü almak oluyor. Ayın ilk ve son gününü alırken de yılın il ve son günün aldığımız mantık ile yapıyoruz. Şuan ki tarih bilgisinden yıl ve ay bilgisini alıyoruz. Aldığımız bu bilgiler ile yeni bir datetime değişkeni oluşturup ayın ilk gününü bu değişkene atıyoruz. Sonrasında da bu yeni tarihe bir ay ekleyip bir gün çıkartıyoruz.
Haftanın ilk ve son gününü bulmak
// Haftanın ilk ve son günü DateTime dt_Hafta = DateTime.Now; switch ((int)dt.DayOfWeek) { case 0://Haftanın ilk günü Pazar kabul edildiğinden dt_Hafta_ilkGun = dt_Hafta.AddDays(-6).ToShortDateString(); // İçinde olduğumuz haftanın başı Pazartesi dt_Hafta_sonGun = dt_Hafta.AddDays(1).ToShortDateString(); // Sonraki haftanın başı Pazartesi break; default:// Gün Pazar değilse; dt_Hafta_ilkGun = dt_Hafta .AddDays(1 - (int)dt.DayOfWeek).ToShortDateString(); // İçinde olduğumuz haftanın başı Pazartesi dt_Hafta_sonGun = dt_Hafta .AddDays(6).ToShortDateString(); // Sonraki haftanın başı Pazartesi break; }
Haftanın ilk ve son günün almak yıl ve ay gibi kolay değil elbette :). Çünkü bazı ülkelerde hafta başı Pazar günü kabul ediliyor. Bu sebeple haftanın kaçıncı gününde olduğumuzdan yola çıkarak haftanın ilk gününü buluyoruz. Sonrasında da bu tarihe 7 gün ekleyerek haftanın son gününü buluyoruz.
Günün başlangıcı ve sonunu bulmak
Bunuda bonus olarak yazmış olalım. :) Bunda biraz kolaya kaçalım. :)
DateTime dt_Gun_Basla = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00); DateTime dt_Gun_Bitis = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
İçerisinde bulunduğumuz yıl, ay ve günü kullanarak günü ilk ve son saat, dakika ve saniyesini manuel olarak veriyoruz. Basit ama bize kolaylık sağlıyor.
Ek olarak şunu da vermiş olalım. :)
DateTime Suan = DateTime.Now;
Bu şekilde de kodun çalıştığı anı alırız
Şimdi bunları bir class yapacak olsak nasıl yaparız? Class, Class her yerde, her zaman, her konuda gerekiyor. :)
Hazırladığım class’ı sizlerle de paylaşayım.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Uygulamam { public class Tarih_islemleri { public static DateTime GunBaslangic, GunBitis; public static DateTime HaftaninIlkGunu, HaftaninSonGunu; public static DateTime AyinIlkGunu, AyinSonGunu; public static DateTime YilinIlkGunu, YilinSonGunu; public static void GunBilgileriniAl() { GunBaslangic = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 00, 00); GunBitis = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59); } public static void HaftaBilgileriAl() { DateTime dt = DateTime.Now; switch ((int)dt.DayOfWeek) { case 0://Haftanın ilk günü Pazar kabul edildiğinden HaftaninIlkGunu = dt.AddDays(-6); // İçinde olduğumuz haftanın başı Pazartesi HaftaninSonGunu = HaftaninIlkGunu.AddDays(1); // Sonraki haftanın başı Pazartesi break; default:// Gün Pazar değilse; HaftaninIlkGunu = dt.AddDays(1 - (int)dt.DayOfWeek); // İçinde olduğumuz haftanın başı Pazartesi HaftaninSonGunu = HaftaninIlkGunu.AddDays(6); // Sonraki haftanın başı Pazartesi break; } } public static void AyBilgileriniAl() { AyinIlkGunu = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); // Ay ilk günü AyinSonGunu = AyinIlkGunu.AddMonths(1).AddDays(-1);// Ay son günü } public static void YilBilgileriniAl() { YilinIlkGunu = new DateTime(DateTime.Now.Year, 1, 1); // Yılın ilk günü YilinSonGunu = YilinIlkGunu.AddYears(1).AddDays(-1); // Yılın son günü } } }
Voidleri public yapmamın sebebi, değişkenler ilk anda boş olduğundan istediğimiz tarihleri alamayız. Bu sebeple değişkenleri doldurmak için önce voidleri bir kere çalıştırmamış gerekmektedir.
Değişkenleri Static yapmamdaki amaç ise bu kullanım şeklinin bana daha kolay gelmesidir. İsterseniz diğer kullanım şeklini de kullanabilirsiniz. Bu konuları Class Nedir? Nasıl Kullanılır? başlıklı yazımda bahsetmiştim.
Şimdi kullanım şeklimizi görelim.
private void Form1_Load(object sender, EventArgs e) { Tarih_islemleri.GunBilgileriniAl(); DateTime dt1 = Tarih_islemleri.GunBaslangic; DateTime dt2 = Tarih_islemleri.GunBitis; Tarih_islemleri.HaftaBilgileriAl(); DateTime dt3 = Tarih_islemleri.HaftaninIlkGunu; DateTime dt4 = Tarih_islemleri.HaftaninSonGunu; Tarih_islemleri.AyBilgileriniAl(); DateTime dt5 = Tarih_islemleri.AyinIlkGunu; DateTime dt6 = Tarih_islemleri.AyinSonGunu; Tarih_islemleri.YilBilgileriniAl(); DateTime dt7 = Tarih_islemleri.YilinIlkGunu; DateTime dt8 = Tarih_islemleri.YilinSonGunu; MessageBox.Show( dt1.ToString() + Environment.NewLine + dt2.ToString() + Environment.NewLine + Environment.NewLine + dt3.ToString() + Environment.NewLine + dt4.ToString() + Environment.NewLine + Environment.NewLine + dt5.ToString() + Environment.NewLine + dt6.ToString() + Environment.NewLine + Environment.NewLine + dt7.ToString() + Environment.NewLine + dt8.ToString() + Environment.NewLine ); }
Önce voidleri çalıştırıyoruz. Sonrasında değişkenleri çağırıyoruz. MessageBox ile de tarihlerimizi ekrana basalım. Bakalım doğru bilgileri alabilmiş miyiz?. Ekran Görüntüsü,
Evet istediğimiz bilgiler hatasız geldi.
BİLGİ: Environment.Newline, örnekten de anlayacağınız gibi bir alt satıra geçmemizi sağlar.
C# hakkındaki diğer derslerim için tıklayabilirsiniz.
C Sharp Eğitim Seti ve ERP Programlama eğitimi sayfasına gitmek için tıklayınız.
Bu dersimizde bu kadar dostlar. Diğer derslerimizde görüşmek üzere…
Sağlıcakla ve Takipte kalın. ;)
Haftalık hesaplamada bir hata var..
haftanın son gününü 7 ekleyerek bulamazsın pazar hariç günlerde..
haftanın ilk gününde sıkıntı yok.
örn..
Bugün Salı ise.. 7 eklersek o da salı olur..
Bugün Ctesi ise 7 eklersek o da Ctesi olacaktır.
Bilginiz olsun.
İyi Çalışmalar.. Bunun dışında işime yaradı teşekkürler
Aynen. Çok doğru bir tespit olmuş. Haftanın günü aslında 6 gün eklenerek bulunur. Yani Pazartesi gününden Pazar gününe… 6 gün eklenmesi gerekiyor.
Düzeltiyorum. İlgine teşekkürler.