Вычисление дня недели по дате
От: Silverj  
Дата: 02.06.03 04:21
Оценка:
Как вычислить день недели по дате?

Нашел алгоритм, но не весь, че то там не то помогите



n:=trunc(365.25*y)+trunc(30,6*m)+d-621050;
Result:=n-trunc(n/7)*7+1;
С уважением, Евгений
Re: Вычисление дня недели по дате
От: ZORK Россия www.zorkaltsev.com
Дата: 02.06.03 05:59
Оценка:
Здравствуйте, Silverj, Вы писали:

S>

S>n:=trunc(365.25*y)+trunc(30,6*m)+d-621050;
S>Result:=n-trunc(n/7)*7+1;

S>


Я ради интереса посмотрел как сделан в Java java.util.Calendar, и понятно, что этот алгоритм сильно упрощен и не учитывает ряд моментов — но кроме Leap Seconds, я не готов сказать каких еще. Очевидные моменты почему он может работать не правильно — 2000-ный год был не высокосный, так как он кратен 1000 и возможно 621050 не правильное число, так как оно зависит от того, что считается нулем для системного времени — в unix это, кажется 1-ое января 1970-го, а в DOS и Windows 1-ое же января но 1980-го. Самое просто выяснить это число экперементально — вроде как для этого кода, досточно любое чилсо соотвествующие 12-ти ночи в любой понедельник

-zork
Думать надо ...головой :)
Re: Вычисление дня недели по дате
От: Аноним  
Дата: 02.06.03 07:02
Оценка:
Здравствуйте, Silverj, Вы писали:

S>Как вычислить день недели по дате?


Учитывает все (получаем n = 0 — воскресенье, 1 — понедельник и т.д.):
#include <iostream.h>



typedef char TDayName[15];
TDayName names[7] = {"воскресенье", "понедельник", "вторник",
                     "среда", "четверг", "пятница", "суббота"};

void main(void) {
    int d, m, y, n;

    cout << "dd mm yyyy : ";
    cin >> d >> m >> y;

    // год начинается с марта
    m -= 2;
    if (m <= 0) {
        m += 12;
        y--;
    };
    // собственно формула
    n = (d + (13 * m - 1) / 5 + (y % 100) + (y / 100) / 4
            + (y % 100) / 4 - 2 * (y / 100)) % 7;
    // если получается число < 0, то прибавляем 7
    if (n < 0) {
        n += 7;
    };

    cout << names[n] << '\n';
};
Re[2]: Вычисление дня недели по дате
От: Apapa Россия  
Дата: 02.06.03 07:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Silverj, Вы писали:


S>>Как вычислить день недели по дате?


А>Учитывает все (получаем n = 0 — воскресенье, 1 — понедельник и т.д.):

<>

Пардон, но Аноним — это я...
Может модератор может исправить, а это сообщение удалить?


Здесь могла бы быть Ваша реклама!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.