Çözüldü Belirtilen tarihin bulunduğu haftadaki istenilen günü bulma işlemi nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

genslife

Centipat
Katılım
16 Ağustos 2022
Mesajlar
153
Çözümler
5
Yer
Diyarbakır
Daha fazla  
Cinsiyet
Erkek
Meslek
IT Uzmanı
Merhaba,

C# programlama dilinde bir çalışma geliştiriyorum firmamız için.
Sisteme belirttiğimiz tarihin içerisinde bulunduğu haftanın belirli bir gününü bulmak istiyorum.

Örnek verecek olursak:
Sisteme belirtilen tarih 12.09.2023 (salı) o hafta içerisinde bulunan (perşembe) gününün tarihini sistemde bulmam gerekiyor.

Ya da şöyle bir örnek vereyim:
Bugün çarşamba ise bu haftaki çarşambadan sonraki cumayı bulmam gerekiyor tarih olarak. Yardımlarınızı bekliyorum.
 
Çözüm
Hayır gün yeterlidir bizim için saat önemli değil.
C#:
int dayOfWeek = (int)DateTime.Now.DayOfWeek;
int pazDif = dayOfWeek == 1 ? 7 : (7 + (1 - dayOfWeek)) % 7;
int perDif = dayOfWeek == 4 ? 7 : (7 + (4 - dayOfWeek)) % 7;
Console.WriteLine(DateTime.Now.AddDays(Math.Min(pazDif, perDif)).ToString("dd.MM.yyyy HH:mm"));
pazDif ve perDif değişkenleri güncellendi. Kısa olması açısından ternary kullandım if de kullanılabilirdi. Eğer bugün pazartesi ise pazartesi farkını 7 olarak atadık, perşembe ise perşembe farkını 7 olarak atadık.(7 otomatik olarak Math.Min içerisinde elenecek ve diğer güne atayacak)

Boş yere ikisini de hesaplamıyım diyorsan if ile kontrol edip sadece pazartesiyi veya sadece perşembeyi hesaplatmayı da yapabilirsin.
Kodu apiden gelen tarihe göre şekillendireceğim fakat tarih kısmını manuel yazınca istediğimiz sonucu vermiyor saçmalıyor tarih. Varmı aklınızda bir çözüm.
Hocam çünkü Convert.ToDateTime derseniz o sizin yazdığınız tarihi ay/gün/yıl olarak zannediyor ve ona göre çeviriyor. Bu yüzden DateTime.ParseExact(dateString, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture); şeklinde dönüşüm yapılmalı.

Eğer saat bilgisi de geliyorsa API'dan "dd.MM.yyyy HH:mm" şeklinde değiştirilebilir.

Düzenlenmiş kod:
C#:
string dateString = ""; // apiden gelen tarih
DateTime odemeGunu;
if (!DateTime.TryParseExact(dateString, "dd.MM.yyyy",System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out odemeGunu)){
    // Hata messajı gönder
}
int dayOfWeek = (int)odemeGunu.DayOfWeek;
int pazDif = dayOfWeek == 1 ? 7 : (7 + (1 - dayOfWeek)) % 7;
int perDif = dayOfWeek == 4 ? 7 : (7 + (4 - dayOfWeek)) % 7;
Response.Write(DateTime.Now.AddDays(Math.Min(pazDif, perDif)).ToString("dd.MM.yyyy"));
 
Son düzenleme:
Hocam çünkü Convert.ToDateTime derseniz o sizin yazdığınız tarihi ay/gün/yıl olarak zannediyor ve ona göre çeviriyor. Bu yüzden DateTime.ParseExact(dateString, "dd.MM.yyyy", System.Globalization.CultureInfo.InvariantCulture); şeklinde dönüşüm yapılmalı.

Eğer saat bilgisi de geliyorsa API'dan "dd.MM.yyyy HH:mm" şeklinde değiştirilebilir.

Düzenlenmiş kod:
C#:
string dateString = ""; // apiden gelen tarih
DateTime odemeGunu;
if (!DateTime.TryParseExact(dateString, "dd.MM.yyyy",System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out odemeGunu)){
    // Hata messajı gönder
}
int dayOfWeek = (int)odemeGunu.DayOfWeek;
int pazDif = dayOfWeek == 1 ? 7 : (7 + (1 - dayOfWeek)) % 7;
int perDif = dayOfWeek == 4 ? 7 : (7 + (4 - dayOfWeek)) % 7;
Response.Write(DateTime.Now.AddDays(Math.Min(pazDif, perDif)).ToString("dd.MM.yyyy"));

Son olarak response kısmındaki DateTime.Now kısmını değiştirmeyi unutmuşsunuz onuda düzelttim tam anlamı ile çalıştı. Teşekkür ederim.

C#:
string dateString = ""; // apiden gelen tarih
DateTime odemeGunu;
if (!DateTime.TryParseExact(dateString, "dd.MM.yyyy",System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out odemeGunu)){
    // Hata messajı gönder
}
int dayOfWeek = (int)odemeGunu.DayOfWeek;
int pazDif = dayOfWeek == 1 ? 7 : (7 + (1 - dayOfWeek)) % 7;
int perDif = dayOfWeek == 4 ? 7 : (7 + (4 - dayOfWeek)) % 7;
Response.Write(odemeGunu.AddDays(Math.Min(pazDif, perDif)).ToString("dd.MM.yyyy"));
 

Yeni konular

Geri
Yukarı