Библиотеки: TimeDaylightCorrections

 

TimeDaylightCorrections:

Функция смещения Ролловера на 1 час во время перехода на зимнее/летнее время.

Автор: Dmitiry Ananiev

 
Наверное, лучше показать график и стат данные отчета лучшего прохода оптимизации БЕЗ использования этого смещения и те же данные, но С включенным режимом.
 

По теме библиотеки считалка/напоминалка.

// Таблица перехода на зимнее/летнее время Europe/USA.

#define DAY (24 * 3600)
#define WEEK 7

ENUM_DAY_OF_WEEK TimeDayOfWeek( const datetime time )
{
  return((ENUM_DAY_OF_WEEK)((time / DAY + THURSDAY) % WEEK));
}

datetime FirstDayWeekMonth( const int Year, const int Month, const int Count = 1, const ENUM_DAY_OF_WEEK DayWeek = SUNDAY )
{
  const datetime time = (datetime)((string)Year + "-" + (string)Month + "-01");
  
  return(time + ((WEEK + DayWeek - TimeDayOfWeek(time)) % WEEK) * DAY + (Count - 1) * WEEK * DAY);
}

datetime LastDayWeekMonth( const int Year, const int Month, const ENUM_DAY_OF_WEEK DayWeek = SUNDAY )
{
  const datetime time = (datetime)((string)(Year + (Month == 12)) + "-" + (string)((Month + 1) % 12) + "-01") - DAY;
  
  return(time - ((WEEK + TimeDayOfWeek(time) - DayWeek) % WEEK) * DAY);
}

string ToString( const datetime time1, const datetime time2 )
{
  return(TimeToString(time1, TIME_DATE) + "(+1) - " + TimeToString(time2, TIME_DATE)+ "(-1)");
}

void OnStart()
{
  for (int i = 2015; i < 2025; i++)
    Print((string)i + ", Europe: " + ToString(LastDayWeekMonth(i, 3), LastDayWeekMonth(i, 10)) +
                      ", USA: " + ToString(FirstDayWeekMonth(i, 3, 2), FirstDayWeekMonth(i, 11)));
}


2015, Europe: 2015.03.29(+1) - 2015.10.25(-1), USA: 2015.03.08(+1) - 2015.11.01(-1)
2016, Europe: 2016.03.27(+1) - 2016.10.30(-1), USA: 2016.03.13(+1) - 2016.11.06(-1)
2017, Europe: 2017.03.26(+1) - 2017.10.29(-1), USA: 2017.03.12(+1) - 2017.11.05(-1)
2018, Europe: 2018.03.25(+1) - 2018.10.28(-1), USA: 2018.03.11(+1) - 2018.11.04(-1)
2019, Europe: 2019.03.31(+1) - 2019.10.27(-1), USA: 2019.03.10(+1) - 2019.11.03(-1)
2020, Europe: 2020.03.29(+1) - 2020.10.25(-1), USA: 2020.03.08(+1) - 2020.11.01(-1)
2021, Europe: 2021.03.28(+1) - 2021.10.31(-1), USA: 2021.03.14(+1) - 2021.11.07(-1)
2022, Europe: 2022.03.27(+1) - 2022.10.30(-1), USA: 2022.03.13(+1) - 2022.11.06(-1)
2023, Europe: 2023.03.26(+1) - 2023.10.29(-1), USA: 2023.03.12(+1) - 2023.11.05(-1)
2024, Europe: 2024.03.31(+1) - 2024.10.27(-1), USA: 2024.03.10(+1) - 2024.11.03(-1)


Можно автоматически заполнить соответствующие статические массивы переходов во времени.

Причина обращения: