Как сделать?
…
evp,
я имел ввиду написать более подробно, разложив по полочкам для людей БЕЗ образования в области программирования… ну примерно как вы и сделали под конец всё таки…) Вроде бы я всё понял - но на деле надо проверять, смогу ли я всё правильно выстроить в код, вот мой камень преткновения… :rolleyes: к слову - я очень долго въезжал - почему, если вы говорите, что начинается отсчёт 16го - у вас 17го идёт уже 2421540-й Юлианский день… :rolleyes: :lol: только вчитавшись в текст пару раз понял свою ошибку… буду пробывать… спасибо…
evp,
Код прошел проверки как теоретические на предмет превышения разрядности в разумных диапазонах дат, так и практические. И он на 100% работает, обеспечивая точность, какую может обеспечить нынешний Григорианский календарь.
Это здорово. В таком случае, сегодня я проверю его сам, и добавлю в раздел “Как сделать?”.
Спасибо, что поделился формулами. Я когда-то искал подходящие алгоритмы календаря, но они все были слишком сложные.
Nex уже исправил ошибку втихоря
Конечно исправил опечатку, зачем на форуме будет ошибочный код?
Nex,
мммм… Когда добавишь такой код в раздел - сообщи тут… думаю многие скажут спасибо… включая меня))
Этот алгоритм хорошо работает на датах от 1 г. н.э. и дальше. Но если вы хотите его использовать для отображения дат до нашей эры, то рекомендую добавить вот это:
$year = iif (year < 1, '<<-year+1>> г. до н.э.', '<<year>> г.'))
Это становится необходимым, если вы действительно хотите, чтобы отображение дат полностью соответствовало Григорианскому календарю. Дело тут в том, что алгоритм вычисляет астрономический счет лет, при котором за -1-м годом следует нулевой год, а затем 1-й год. В Григорианском же календаре принято, что первому году н.э. предшествовал 1-й год до н.э. Нулевого года в Григорианском календаре нет.
evp:
Наличие в играх календаря в 360 дней - сугубо некомпетентность программистов, писавших эти игры.
Счет дат, используя Юлианские дни, был предложен еще в 1849 году Гершелем. Соответственно, алгоритм, который я привел, появился еще тогда.
Когда я учился в школе, мы изучали астрономию, а в рамках этой дисциплины нам преподали и базовые знания о календарях и системах счета времени. В эти базовые знания были включены, наряду с информацией о других календарях, также сведения о системе счета Юлианских дней, как наиболее распространенной системе счета времени в астрономии.
Кроме того, в современной информатике различные алгоритмы счета времени имеют своей основой именно этот алгоритм счета по Юлианским дням, даже если это не очевидно с первого взгляда. Хотя бы потому, что для различных систем счета, будь то UNIX-time, ANSI дата или других, очевидна необходимость представления дат в привычном для людей виде - в виде дат Григорианского календаря.
Возможно, нынешняя система образования не столь щепетильно относится к расширению кругозора учащихся и незнание основ календарного счета времени сегодня - норма. В таком случае, конечно, написанное мной в цитате, можно растолковать как завуалированное оскорбление участников форума (есть такое мнение).
Поэтому, прошу тех, кто усмотрел в моих словах личное уязвление, простить невольно нанесенную обиду.
Один вопрос. Только нафиг вам это надо? :/
SneakBug8, если это ко мне, то, простите - не понял вопроса.
evp:
SneakBug8, если это ко мне, то, простите - не понял вопроса.
Зачем вам нужны грегорианские календари? Пользуйтесь обычным.
Григорианский это и есть обычный.
wikipedia/Григорианский_календарь
Axil, вот это - то, о чем я писал.
Больше того, даже на Википедии по вашей ссылке скрипт неправильно определяет сегодняшнюю дату - он говорит, что сегодня 1 июня 2015. <рука-лицо> А я-то думал, почему у них в статье, посвященной Юлианским дням, в таблице сегодняшний JDN расходится с реальным на 2 дня?
Раз уж про календари и время рассказывают, тогда и я спрошу:
1. Сделал время не через локацию-счетчик, а проверяя #time. Герой ложится спать и просыпается через 8 часов и время у него 28:22. Чтобы этого избежать, прописал так:
IF hour = 24: hour = 0
IF hour = 25: hour = 1
IF hour = 26: hour = 2
etc.
но мне этот способ не слишком нравится. Должно же быть как-то правильно? По идее, должно хватать только первой строчки.
2. Спрашивал уже, но ответа не получил, поэтому опять спрашиваю.
На локации-счетчике сделал время (секундомер). Запустить его в реал-тайме из другой локации у меня получилось, а вот остановить, а потом опять запустить с остановленного места - нет.
Должно же быть как-то правильно?
Правильно тут.
“Прошло 8 часов” в коде должно записываться так:
время += 8*60
После каждого изменения переменной “время”, ты должен заново пересчитать значения минут, часов и т.д.
Nex,
“Вы опять игнорировали мой вопрос, относительно магнитофона…” (с)
Я делал на основе этого примера, только без учёта дней, т.е. когда hour >= 24: day += 1
Отсюда и растут ноги у 28 часов. Как попало время прибавлять я научился.
if hour >= 24:
:loophour
day = day + 1
week = week + 1
hour = hour - 24
if hour >= 24: jump 'loophour'
end
Проверка и jump там на всякий случай, мало ли, вы двое суток спали.
Кто-нибудь делал алгоритм поиска пути A* на qsp?
Интересует именно версия по обходу графа, а не двухмерной сетки.
Локации с переходами между ними это же граф.