@embiid

Как определить какой сейчас сезон и сколько прошло дней по сегодня?

Нужно узнать колтво дней которое прошло с начало сезона.
var getTodaysDate = DateTime.Now;
			var todaysSeason = GetSeason(getTodaysDate);
			DateTime springStarts = new DateTime(DateTime.Now.Year, 3, 1);
			DateTime summerStarts = new DateTime(DateTime.Now.Year, 6, 1);
			DateTime autumnStarts = new DateTime(DateTime.Now.Year, 9, 1);
			DateTime winterStarts = new DateTime(DateTime.Now.Year, 12, 1);

		private static Season GetSeason(DateTime date)
		{
			int month = date.Month;

			if (month >= 3 && month <= 5)
			{
				return Season.Spring;
			}
			else if (month >= 6 && month <= 8)
			{
				return Season.Summer;
			}
			else if (month >= 9 && month <= 11)
			{
				return Season.Autumn;
			}
			else
			{
				return Season.Winter;
			}
		}

Не знаю как теперь выбрать какой сезон
TimeSpan daysPassed = getTodaysDate - summerStarts; //как сделать его тут динамически
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@Electron12121
Вы можете использовать оператор switch для выбора правильного сезона в зависимости от значения переменной todaysSeason:
ini
var getTodaysDate = DateTime.Now;
var todaysSeason = GetSeason(getTodaysDate);

switch (todaysSeason)
{
case Season.Spring:
daysPassed = getTodaysDate - springStarts;
break;
case Season.Summer:
daysPassed = getTodaysDate - summerStarts;
break;
case Season.Autumn:
daysPassed = getTodaysDate - autumnStarts;
break;
case Season.Winter:
daysPassed = getTodaysDate - winterStarts;
break;
}
Также вы можете использовать метод DateTime.ToLocalTime(), чтобы получить локальное время для текущей даты и времени. Это может быть полезно, если вы хотите определить сезон для определенной временной зоны.
var getTodaysDate = DateTime.Now.ToLocalTime();
var todaysSeason = GetSeason(getTodaysDate);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Где то так, но пробегитесь тестами по крайним датам

Console.WriteLine(new DateTime(2023, 3, 1).GetSeason());
Console.WriteLine(new DateTime(2023, 6, 1).GetSeason());
Console.WriteLine(new DateTime(2023, 9, 1).GetSeason());
Console.WriteLine(new DateTime(2023, 12, 1).GetSeason());
Console.WriteLine(new DateTime(2023, 12, 2).GetSeasonDay());
public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}


public static class SeasonTools
{
    public static Season GetSeason(this DateTime date)
    {
        int month = date.Month;

        if (month >= 3 && month <= 5) return Season.Spring;
        else if (month >= 6 && month <= 8) return Season.Summer;
        else if (month >= 9 && month <= 11) return Season.Autumn;
        else return Season.Winter;
    }
    public static int GetSeasonDay(this DateTime date)
    {
        int month = date.Month;
        if (month >= 3 && month <= 5) return GetDay(date,Season.Spring);
        else if (month >= 6 && month <= 8) return GetDay(date,Season.Summer);
        else if (month >= 9 && month <= 11) return GetDay(date,Season.Autumn);
        else return GetDay(date, Season.Winter);
    }
    private static int GetDay(DateTime date, Season season)
    {
        if (season == Season.Spring) return (int) (date - new DateTime(date.Year, 3, 1) ).TotalDays ;
        else if (season == Season.Summer) return (int)(date - new DateTime(date.Year, 6, 1)).TotalDays;
        else if (season == Season.Autumn) return (int)(date - new DateTime(date.Year, 9, 1)).TotalDays;
        else return (int)(date - new DateTime(date.Year, 12, 1)).TotalDays;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы