powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сколько лет?
10 сообщений из 10, страница 1 из 1
Сколько лет?
    #38527204
ALKIR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачка.

Опишите алгоритм определения количества полных лет между двумя датами. Даты заданы числом секунд от 1 января 1970 г. Использовать библиотечные функции для работы с датами не разрешается.

Пример:
Некто родился 1 359 676 800 (2013-02-01 00:00:00).
Сколько ему будет полных лет когда наступит 1 454 025 600 (2016-01-29 00:00:00)?
...
Рейтинг: 0 / 0
Сколько лет?
    #38527223
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сколько лет?
    #38527238
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ALKIR Задачка.

Опишите алгоритм определения количества полных лет между двумя датами. Даты заданы числом секунд от 1 января 1970 г. Использовать библиотечные функции для работы с датами не разрешается.

Пример:
Некто родился 1 359 676 800 (2013-02-01 00:00:00).
Сколько ему будет полных лет когда наступит 1 454 025 600 (2016-01-29 00:00:00)?В смысле, разницу целочисленно поделить на количество секунд в году ?
...
Рейтинг: 0 / 0
Сколько лет?
    #38527306
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
количество секунд в году число не постоянное тут нужен алгоритм вечного календаря =)
...
Рейтинг: 0 / 0
Сколько лет?
    #38527367
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня жестокое дежа-вю. Кажется пора закрывать подобные темы и давать ссылку
на этот "чортов алгоритм расчёта дней/месяцев/лет между датами..."
...
Рейтинг: 0 / 0
Сколько лет?
    #38527505
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... можно прямо в rfc :)
...
Рейтинг: 0 / 0
Сколько лет?
    #38527682
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сколько лет?
    #38527731
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как-то тоже предлагал считать вот так 13903561 (методики при этом не читал )
Но "вечный" календарь всё же потребуется. Ну а когда переведёте секунды в формат ISO8601 -дальше вычисление возраста проблем не представит...
...
Рейтинг: 0 / 0
Сколько лет?
    #38528908
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$startStamp = 1359676800; //начальная дата
$endStamp = 1454025600; //конечная дата

$startFrom = (8*366+23*365)*86400;
$yearsToStart = floor(($startStamp-$startFrom)/12622780800)*400
                     + floor((($startStamp-$startFrom)%12622780800)/126230400)*4+
                     + ((($startStamp-$startFrom)%12622780800)%126230400)/31536000;
$yearsToEnd  = floor(($endStamp-$startFrom)/12622780800)*400
                     + floor((($endStamp-$startFrom)%12622780800)/126230400)*4+
                     + ((($endStamp-$startFrom)%12622780800)%126230400)/31536000;

$res = floor($yearsToEnd - $yearsToStart);



Не проверял все возможные варианты (типа границу високосного года и т.д.), но должно работать правильно.
...
Рейтинг: 0 / 0
Сколько лет?
    #38530577
aybek_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала давайте разберемся с этой путаницей с високосными годами.
Год является високосным если нацело делится на 4, но не делится на 100.
Но годы которые делятся на 400 тоже являются високосными (в этом случае
правило насчет 100 не работает)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
#include <iostream>
using namespace std;

#define SEC_V_YEAR	31622400
#define SEC_YEAR	31536000

#define YEAR_FROM	1970

bool is_visokos(size_t year) {
	if (!(year % 4) || !(year % 400)) {
		return true;
	} else {
		return false;
	}
}

int main() {
	uint64_t sec_beg;
	uint64_t sec_end;

	cin >> sec_beg >> sec_end;

	uint64_t sec = sec_end - sec_beg;

	size_t year = 1970;
	while ((sec >= SEC_V_YEAR) || (sec >= SEC_YEAR)) {

		if (is_visokos(year)) {
			sec -= SEC_V_YEAR;
		} else {
			sec -= SEC_YEAR;
		}
		++year;
	}

	cout << year-YEAR_FROM << endl;

	return 0;
}
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сколько лет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]