C# ile iki tarih arasında belli bir günden kaç adet olduğunu bulmak

Geliştirdiğim projede iki tarih aralığında belirli bir günden kaç adet olduğunu bulmam gerekti.

Bunun için iki tarih arasındaki gün farkını alıp, bir tarih listesi oluşturmak için kullanıyorum, daha sonra tarih listesinin içinde istediğim gün’den kaç tane olduğunu sayıyorum.

Örneğin 2013 yılındaki Pazartesilerin adedi için;

var baslangic = new DateTime(2013, 1, 1); var bitis = new DateTime(2013, 12, 31); var toplamGun = (int)bitis.Subtract(baslangic).TotalDays + 1;

var tarihListe = Enumerable.Range(1, toplamGun).Select(e => baslangic.AddDays(e));

var gunAdet = tarihListe.Where(e => e.DayOfWeek == DayOfWeek.Monday).Count();

XNA Oyun Programlama Platformu Hakkında

Günümüzde tüm yazılım sektörü gibi oyun dünyası’da çok hızlı gelişmeye ve şekillenmeye başladı. Artık insanlar yeni bir oyun için aylarca beklemeye tahammül etmiyor.

Böyle zamanlarda yapılması gereken ürünü mümkün olan en hızlı yollardan tüketiciye ulaştırmaktır. Bu durumun farkına varan oyun evleri birkaç yıl öncesine göre çok daha kısa sürelerde yeni oyun üretmenin yollarını aramaya başladı.

2004 yılında Microsoft, Indie olarak kısalttığımız Independent Game Developer‘lar (yani Bağımsız Oyun Geliştiriciler) için hızlı oyun geliştirme platformunu duyurdu ve 2006 yılının ikinci yarısında da XNA Game Studio ismi ile yayınladı. 2007 yılından beri oyun evleri ve bağımsız geliştiriciler XNA Framework ile hem 2 boyutlu hem de 3 boyutlu oyunlar geliştiriyorlar.

XNA, mümkün olan en az kod değişikliği ile şu platformlar için oyunları geliştirmemize yardımcı olur;

  • Windows üzerinde çalışan 2 boyutlu ve 3 boyutlu oyunlar
  • Microsoft’un oyun platformu olan XBOX üzerinde çalışan 2 boyutlu ve 3 boyutlu oyunlar
  • Microsoft’un mobil platformu olan Windows Phone ailesi üzerinde çalışan 2 boyutlu ve 3 boyutlu oyunlar

Özellikle mobil oyunların son yıllarda izlediği trende bakacak olursak, oyun geliştiriciler için çok güzel bir pazar olduğunu farkederiz.

XNA sayesinde, çok az kod değişikliği yaparak birden fazla platforma oyunlarımızı yayınlayabiliyoruz.

Üstelik oyun geliştirmeye başlarken ihtiyaç duyacağımız tüm araçlar (XNA Framework’un kendisi, Visual Studio’nun Express sürümü) Microsoft tarafından ücretsiz olarak sağlanıyor.

Tüm maddeleri özetleyecek olursak, XNA ile başlangıç maliyetleri olmadan, Microsoft tarafından desteklenen tüm platformlara hem 2 boyutlu, hem 3 boyutlu oyun geliştirebiliyoruz.

Neden XNA tercih etmeliyiz?

Geliştirici açısından düşünecek olursak, XNA, .Net Framework temelleri üzerine kurulduğu için, C#, VB.Net ve C++.Net gibi .Net ailesi diller ile geliştirilebiliyor.

Eğer zaten .Net dünyasına ve .Net ailesi dillere aşina iseniz, XNA ile oyun geliştirmeye hemen başlayabilirsiniz.

Üstelik XNA’de kazandığınız tecrübeler ve .Net dillerinde kazandığınız tecrübeler, birleşerek tüm yazılım geliştirme yeteneklerinizi olumlu yönde etkileyecektir.

Ayrıca Oyun Yaşam Döngüsü dediğimiz, bir oyun’un başlatıldığı andan sonlandırıldığı ana kadar geçen tüm süreçler XNA içerisinde çok net bir şekilde tanımlanmıştır.

Haliyle XNA ile oyun geliştirmeye başlamanın yanı sıra, XNA ile oyun geliştirme sürecinin kendisi de en az efor ile öğrenilecek kadar kolaylaştırılmıştır.

XNA ile geliştirilen oyunlar, minimum efor ile, Windows - XBOX - Windows Phone platformlarına taşınabiliyor. Böylece hedef kitlemizi artırabilir, oyunumuzun çok daha büyük kitlelere ulaşmasını sağlayabiliriz.

Çok Oyunculu oyunlar geliştirme süreçleri de XNA sayesinde çok kolaylaştırılmıştır. XNA Framework, Yerel ağ üzerinden tek sunuculu veya tüm oyuncuların sunucu olduğu senaryo ve internet üzerinden tek sunuculu oyunların yazılması için hazır yapılar barındırmaktadır.

Tüm maddeleri özetleyecek olursak, .Net ailesi dil biliyor olmak XNA ile oyun geliştirmeye başlamak için büyük avantajdır.

Yazılım geliştirme ve oyun geliştirme tecrübelerinin transfer edilebiliyor olması aynı şekilde büyük avantajdır. Çok oyunculu oyunların yazılması için kolay kullanıma sahip sınıflar framework ile birlikte gelmektedir.

Ocak 2013 INETA TechDays Etkinliği

26 Ocak 2013 tarihinde Microsoft Türkiye Ofisinde INETA TechDays etkinliği yaptık.

Windows Phone 8 konulu oturumuma katılan herkese teşekkür ederim.

INETA TechDays Etkinliği, Microsoft Türkiye, Windows Phone 8 Oturumu

Ocak 2013 Hacettepe Üniversitesi Windows Phone Etkinliği

INETA Etkinlikleri kapsamında 05 Ocak 2013 ve 06 Ocak 2013 tarihlerinde Hacettepe Üniversitesi Ankara‘da Windows Phone 8 konulu etkinlik yaptık.

Etkinliğe katılan öğrenci arkadaşlara teşekkür ediyorum.

Hacettepe Üniversitesi Ankara, Windows Phone 8 Etkinliği

Windows Phone 8 için Share Task'larının kullanımı

Windows Phone 8 için share task‘ları kullanacağımız bir uygulama geliştireceğiz.

Bu uygulamanın geliştirilmesi sırasında ShareStatusTask, ShareLinkTask, ShareMediaTask, CameraCaptureTask gibi yapıları kullandığımız kodlar yazacağız.

Öncelikle ShareTasks isimli yeni bir Windows Phone App projesi oluşturalım;

Share Tasks Windows Phone Application Project

Proje oluşturduktan sonra gelen Windows Phone Platform versiyon seçim penceresinde Windows Phone OS 8.0 seçeneğinin seçili olduğundan emin olmalıyız;

Windows Phone 8.0 SDK

Ekran tasarımı için MainPage.xaml dosyasını aşağıdaki gibi güncelleyelim;

<Grid x:Name=”LayoutRoot” Background=”Transparent”> <Grid.RowDefinitions> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> <RowDefinition Height=”Auto” /> </Grid.RowDefinitions>

&lt;Grid.ColumnDefinitions&gt;
    &lt;ColumnDefinition Width="125"  /&gt;
    &lt;ColumnDefinition Width="*" /&gt;
&lt;/Grid.ColumnDefinitions&gt;

&lt;TextBlock Text="SHARE TASKS" Style="{StaticResource PhoneTextNormalStyle}" Margin="15,0" Grid.Row="0" Grid.ColumnSpan="2" /&gt;

&lt;TextBlock Text="share status" Margin="10,0,0,10" Style="{StaticResource PhoneTextExtraLargeStyle}" Grid.Row="1" Grid.ColumnSpan="2" /&gt;
&lt;TextBlock Text="STATUS" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="2" Grid.Column="0" /&gt;
&lt;TextBox Margin="0,0,0,0" Name="txtShareStatus_Status" Grid.Row="2" Grid.Column="1" /&gt;
&lt;Button Content="PAYLAŞ" Name="btnShareStatus" Margin="0,0,0,0" Grid.Row="3" Grid.ColumnSpan="2" Click="btnShareStatus_Click" /&gt;

&lt;TextBlock Text="share link" Margin="10,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}" Grid.Row="4" Grid.ColumnSpan="2" /&gt;
&lt;TextBlock Text="TITLE" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="5" Grid.Column="0" /&gt;
&lt;TextBox Margin="0,0,0,0" Name="txtShareLink_Title" Grid.Row="5" Grid.Column="1" /&gt;
&lt;TextBlock Text="MESSAGE" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="6" Grid.Column="0" /&gt;
&lt;TextBox Margin="0,0,0,0" Name="txtShareLink_Message" Grid.Row="6" Grid.Column="1" /&gt;
&lt;TextBlock Text="LINK URL" Margin="30,20,0,0" Style="{StaticResource PhoneTextTitle3Style}" Grid.Row="7" Grid.Column="0" /&gt;
&lt;TextBox Margin="0,0,0,0" Name="txtShareLink_Url" InputScope="Url" Grid.Row="7" Grid.Column="1" /&gt;
&lt;Button Content="PAYLAŞ" Name="btnShareLink" Margin="0,0,0,0" Grid.Row="8" Grid.ColumnSpan="2" Click="btnShareLink_Click" /&gt;

&lt;TextBlock Text="share media" Margin="10,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}" Grid.Row="9" Grid.ColumnSpan="2" /&gt;
&lt;Button Content="KAMERA ÇEK ve PAYLAŞ" Name="btnShareMedia" Margin="0,0,0,0" Grid.Row="10" Grid.ColumnSpan="2" Click="btnShareMedia_Click" /&gt; &lt;/Grid&gt;</pre>

Butonlara basıldığında tetiklenecek method’ları MainPage.xaml.cs dosyasına ekleyelim;

private void btnShareStatus_Click(object sender, RoutedEventArgs e)
{
    var Status = txtShareStatus_Status.Text;

    ShareStatusTask task = new ShareStatusTask();
    task.Status = Status;

    task.Show();
}

private void btnShareLink_Click(object sender, RoutedEventArgs e)
{
    var Title = txtShareLink_Title.Text;
    var Message = txtShareLink_Message.Text;
    var Url = txtShareLink_Url.Text;

    ShareLinkTask task = new ShareLinkTask();
    task.Title = Title;
    task.Message = Message;
    task.LinkUri = new Uri(Url, UriKind.RelativeOrAbsolute);

    task.Show();
}

private void btnShareMedia_Click(object sender, RoutedEventArgs e)
{
    CameraCaptureTask task = new CameraCaptureTask();
    task.Completed += CameraCaptureTask_Completed;

    task.Show();
}

private void CameraCaptureTask_Completed(object sender, PhotoResult e)
{
    ShareMediaTask task = new ShareMediaTask();
    task.FilePath = e.OriginalFileName;

    task.Show();
}


ShareStatusTask, ShareLinkTask, ShareMediaTask sınıflarından yeni bir örnek oluşturulup, Show() method'u çağırıldığı zaman, telefonuna bağlı hesaplardan oluşan *bir liste* ekrana gelir ve *seçilen hesap* üzerinden *paylaşım gerçekleştirilir*.

Uygulamayı çalıştırdığımızda ve Paylaş butonlarından birine bastığınızda aşağıdaki aşağıdaki ekran görüntülerini görüyor olmamız lazım;

![Share Tasks Windows Phone 8 Application](/assets/uploads/2012/12/ShareTasks3.png) ![Share Tasks Windows Phone 8 Application](/assets/uploads/2012/12/ShareTasks4.png)

Projenin kodlarını buradan indirebilirsiniz.

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı