Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сколько лет? / 10 сообщений из 10, страница 1 из 1
15.01.2014, 16:22
    #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
15.01.2014, 16:33
    #38527223
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько лет?
...
Рейтинг: 0 / 0
15.01.2014, 16:46
    #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
15.01.2014, 17:17
    #38527306
Малыхин Сергей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько лет?
количество секунд в году число не постоянное тут нужен алгоритм вечного календаря =)
...
Рейтинг: 0 / 0
15.01.2014, 17:53
    #38527367
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько лет?
У меня жестокое дежа-вю. Кажется пора закрывать подобные темы и давать ссылку
на этот "чортов алгоритм расчёта дней/месяцев/лет между датами..."
...
Рейтинг: 0 / 0
15.01.2014, 20:22
    #38527505
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько лет?
... можно прямо в rfc :)
...
Рейтинг: 0 / 0
16.01.2014, 02:48
    #38527682
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько лет?
...
Рейтинг: 0 / 0
16.01.2014, 08:00
    #38527731
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сколько лет?
Я как-то тоже предлагал считать вот так 13903561 (методики при этом не читал )
Но "вечный" календарь всё же потребуется. Ну а когда переведёте секунды в формат ISO8601 -дальше вычисление возраста проблем не представит...
...
Рейтинг: 0 / 0
16.01.2014, 21:23
    #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
18.01.2014, 17:04
    #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]