tsklab
@tsklab
Здесь отвечаю на вопросы.

Как рассчитать день недели по неземному календарю?

Женечка Картушин удалил вопрос:
Планете Темпос сегодня 1000 лет. На календаре 10.01.1001, среда. Поселение было основано в воскресенье.
В календаре Темпоса есть небольшие отличия от земного. 12 месяцев по 28 дней. А в феврале високосного года 29. Год будет считается високосным если он кратен 5, но из тех что кратны 100 високосными будут только те, что кратны 500. Например 200, 300, 400 - невисокосный, 500 - високосный.
Определите какой день недели на Темпосе по любой заданной дате.
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
tsklab
@tsklab Автор вопроса
Здесь отвечаю на вопросы.
-- 10.01.1001
DECLARE @Y INT = 1001, @M INT = 1, @D INT = 10
DECLARE @DN INT
-- 12 месяцев по 28 дней
SET @DN = 28 * 12 * @Y
-- в феврале високосного года 29, кратен 5
IF ((@Y % 5) = 0) 
  SET @DN = @DN + (@Y / 5)
-- кратны 100 високосными будут только те
IF ((@Y % 100) = 0) 
  SET @DN = @DN - (@Y / 100)
-- кратны 500
IF ((@Y % 500) = 0) 
  SET @DN = @DN + (@Y / 500)
-- месяц, день
SET @DN = @DN + ((@M - 1) * 28)
SET @DN = @DN + @D
-- текущий год високосный и дата больше 28.02?
IF ((@Y % 5) = 0) 
      AND (((@Y % 100) <> 0) OR ((@Y % 500) = 0))
      AND (@M >= 3) 
  SET @DN = @DN + 1

SELECT CONCAT_WS( '.', @D, @M, @Y), DATENAME( weekday, (@DN % 7) - 1 )

10.1.1001 среда
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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