Гостиная
1. Посмотреть фото-альбом
  · Украина
  · Вьетнам 2010
  · Камбоджа 2010
  · Грузия 2009
  · Армения 2009
  · Азербайджан 2009
  · Иран 2009
  · Стамбул 2008
  · Иордания 2008
  · Сирия 2008
  · Ливан 2008
  · Литва 2007
  · Польша 2007
  · Венгрия-Словакия 2007
  · Абхазия 2006
  · Польша 2005
  · Польша 2004
2. Традиции
3. Ремонт
  · Перевешиваем двери холодильника
4. Графомания (моя)
  · О работе переводчика дат
  · LiveJournal (вечная повесть)
  · Камо грядеши?
  · Знакомство по ICQ - знакомство "вслепую"?
5. Графомания (чужая) »
6. Однофамильцы
  · Описание фамилии
  · Поиск по базе
  · Добавить (Удалить)
Последние новости
 17.05.10 Вернулись из путешествия по Средней Азии! Киргизстан (Бишкек, Ош, Иссык-Куль) - Узбекистан (Ташкент, Хива, Бухара, Самарканд) - Та... »»
Поиск

Вид из окна
д.Сапроново
Быстрый переход
Полезно
Достопримечательности Украины Система Orphus
Статистика
Rambler's Top100
      Прихожая    Гостиная    Кабинет    Библиотека    Детская    Выход
О переводчике дат  

<!-- как это работает -->

Т.к. переводчик состоит из нескольких частей, то и рассказывать буду по порядку.


1. Как определяется день недели.

Считается кол-во дней от 1/1/1 до введенной даты №1 и №2, а также №0 (т.е. текущей даты). Делается это определением кол-ва дней в каждом году (365 или 366) и их последовательным сложением. Для того, что бы не перебирать постоянно по 2000 лет, сделана функция знающая кол-во дней в каждых 500 лет, а для часто самых часто используемых промежутков (1900-2100) разделение проведено по 100 лет. Таким образом в самом худшем случае перебирается только 499 лет. Затем считается разница в днях между текущей датой и введенной. Эта разница делится на 7 и таким образом узнается кол-во целых недель, которые и отнимаются от результата деления. Полученный остаток показывает на сколько отстоит день недели введенной даты от текущей. Если введенная больше текущей, то эту разницу надо прибавить к порядковому номеру текущего дня недели, если меньше - отнять.

Т.е. если сегодня 12 мая 2000 года, Пятница (5 день недели), то 8 января 2000 года было: 23+29+31+30+12=125(разница в днях), ОКРВНИЗ(124/7)=17(кол-во целых недель), 125-17*7=6(разница в днях недели), 5-6=-1 (т.к. день недели получился отрицательным добавляем одну полную неделю) -1+7=6. Значит 8 января 2000 года, Суббота, а 2 сентября 2000 года будет: 19+30+31+31+2=113(разница в днях), ОКРВНИЗ(110/7)=15, 113-15*7=1, 5+1=6. Значит 2 сентября 2000 года - Суббота.

Конечно есть и более легкие способы определения дня недели (см. статью "Как определить день недели"). Однако разница в днях между введенными датами все равно понадобится в дальнейшем и хотя вводимый год ограничен 9999, такой способ позволяет высчитывать день недели любого года.


2. Как считается разница между двумя датами.

Разница в днях (полученная ранее) переводится в секунды умножением на (60*60*24) 86400, к ней прибавляются введенные часы, минуты (также переведенные в секунды) и сами секунды. Разница между двумя датами в секундах дает ее саму. Делим ее на 60, получаем кол-во минут между датами. Делим на 3600 получаем кол-во часов, на 86400 - кол-во дней.

С месяцами и годами немного сложнее, т.к. в отдельно взятом году 365,2425 дней (а не 365), каждые 4 года накапливается 1 дополнительный день, для чего собственно и вводятся високосные годы. Таким образом кол-во секунд в году равно 365,2425*24*60*60=31556952. Такой вариант расчета дает некоторую погрешность для одного года, однако она исчезает каждые 4 года и столь незначительна, что проявляется лишь в 3 знаке после запятой. После определения количества лет умножаем это число на 12 и получаем кол-во месяцев. Вот так все "просто".


3. Как считается дата по "старому" стилю.

Современный календарь называется григорианским (новый стиль), он был введен папой Григорием XIII с 4 октября 1582 года (четверг), после которого наступило 15 октября 1582 года (пятница) и заменил юлианский календарь (старый стиль), который применялся с 45 до н. э. В юлианском календаре средняя длительность года в интервале 4 лет равнялась 365,25 суток, что на 11 мин 14 сек длиннее тропического года. Длина года в григорианском календаре в среднем равна 365,2425 суток, что лишь на 26 сек превышает тропический год. Григорианский календарь более точен, поэтому в нем меньше високосных годов, вводимых для устранения расхождения календаря со счетом тропических лет. Таким образом, до 4 октября 1582 года не существовало вообще понятия "старый" или "новый" стиль. Различие между старым и новым стилями составляет в XVIII в. 11 суток, в XIX в. 12 суток и в XX в. 13 суток. В России григорианский календарь введен с 31 января 1918 года, после которого наступило 14 февраля 1918 г. После этой все даты считаются по "новому" стилю.


4. Как определяется знак года по восточному календарю.

Для определения знака года я вывел собственную формулу. Каждый знак года по восточному календарю имеет свой коэффициент:

0 - год Обезьяны,

1 - год Петуха,

2 - год Собаки,

3 - год Кабана,

4 - год Крысы,

5 - год Быка,

6 - год Тигра,

7 - год Кролика,

8 - год Дракона,

9 - год Змеи,

10 - год Лошади,

11 - год Овцы;

Если разделить номер года на 12, а затем отнять целую часть от деления, умножить полученную разность на 12 и округлить ее вверх, то для каждого 12 года получается один и тот же коэффициент.

Например: год 1978 - ОКРВВЕРХ((1978/12-ОКРВНИЗ(1978/12))*12)= ОКРВВЕРХ((164,833333-164)*12)= ОКРВВЕРХ(0,833333*12)= ОКРВВЕРХ(9,999996)=10, значит 1978 - год Лошади.


5. Как определяется ближайшая юбилейная секунда, минута и т.д.

Зная разницу в секундах между датой №2 и текущей получаем разницу в днях, минутах и часах.

Для каждого расчета задаем шаг:

1 000 - для дней,

100 000 - для часов,

1 000 000 - для минут,

100 000 000 - для секунд.

Затем получаем разницу между количеством дней и шагом увеличивая его каждый раз на "шаг", до тех пор пока разница станет больше 0. Затем получаем разницу между этим кол-вом и ближайшим больши числом кратным шагу. Это будет число дней, часов, минут или секунд (в зависимости от того что считаем) до события. Затем отделяем целое кол-во дней, часов, минут, секунд и добавляем их к текущей дате, получая дату события. Как видите все теоретически просто, однако программирование всего это не так уж и легко.

Например: в дате №2 введен ваш день рождения и 1000й день у вас 31 Августа 2003г. с Кд=9, это значит, что 31 Августа будет ваш 9000й день жизни.


<!-- попробовать -->

Хотите попробовать? Переводчик дат.


<!-- спасибо! -->
: BBCode
: HTML


<!-- внимание! -->
  • Код, текст и фотографии размещенные на этом сайте принадлежат их автору - Сапронову Артёму Александровичу.
  • Допускается использование материалов сайта в личных целях.
  • Приветствуется распространение с обязательным указанием активной гиперссылки на страницу, с которой взят материал.
  • Запрещается внесение изменений в исходный текст (в том числе синонимизация и рерайт).
  • Использование материалов сайта в коммерческих целях без согласования с автором запрещено.
  • Обращайте внимание на даты. Некоторые страницы морально устарели.
  • Автор не несет отвественности за любые возможные последствия связанные с использованием материалов сайта.
  • С предложениями, замечаниями или пожеланиями обращайтесь по email.

© 21.04.2001 Артем Сапронов
http://www.sapronov.com

Графомания (моя) ↑↓  ← Ctrl →  LiveJournal (вечная повесть) 
Самые полезные советы те, которые легче всего использовать.
[ ВОВЕНАРГ, Люк де Клапье ]