Почему будням в Excel неправильно за 1900?

Этот вопрос основан на наблюдениях AdamV в ответ на https://superuser.com/questions/41883/how-do-i-get-the-day-name-into-a-cell-in-excel

Если А1 имеет значение 2009-08-01, то:

  • =День(А1) получим 7
  • =Текст(7, "по-дддд-то") получим суббота
  • =Текст(7,"от дддд, гггг-ММ-ДД", у) получим суббота, 1900-01-07
  • =Текст(1,"по-дддд, гггг-ММ-ДД", у) получим воскресенье, 1900-01-01
  • =Текст (на"1900-01-01-то","от дддд, гггг-ММ-ДД", У) и получим воскресенье, 1900-01-01

Последние два не правы: 1 января 1900-это на самом деле понедельник. Различные источники подтверждают, что:

Что я упускаю? Почему в Excel делаю это неправильно?

Комментарии к вопросу (1)
Решение

Как описано в Microsoft КБ 214058:

дополнительную информацию

когда система дат в Microsoft Excel была создана, она была разработана, чтобы быть полностью совместимы с современными системами, используемыми другими программами электронных таблиц.

однако, в этой системе дат 1900 года неверно трактуется как високосный год. Потому что нет 29 февраля (на"високосный день-то") в 1900 году, в день недели для любой даты до 1 марта 1900 (на следующий день после "в високосный день-то"), не вычисляется правильно.

В "другие программы электронных таблиц", которая приведена в в Lotus 1-2-3, который был очень популярен тогда, и ошибочно предположил, что 1900 год был високосным. Это объясняется еще более подробно в КБ 214326:

дополнительную информацию

когда Lotus 1-2-3 был впервые выпущен, программа предположить, что 1900 год был високосным, хотя он на деле не был високосным. Это облегчило для программы для обработки високосного года и не причинили никакого ущерба почти всех дата расчетов в Lotus 1-2-3.

когда Microsoft multiplan это и Microsoft Excel были освобождены, они также предположили, что 1900 был високосным. Это предположение позволило Microsoft multiplan это и Microsoft Excel, чтобы использовать тот же серийный системной даты используется Lotus 1-2-3 и обеспечить большую совместимость с Lotus 1-2-3. Лечение 1900 года как високосного года также сделали его легким для пользователей, чтобы перенести листы из одной программы в другую.

хотя это технически возможно, чтобы исправить эту проблему, так что в текущих версиях Microsoft Excel не предположить, что 1900-високосный год, недостатки перевешивают преимущества.

если такое поведение должны были бы быть исправлены, многие проблемы могут возникнуть, в том числе следующие:

  • почти все даты в текущем электронных таблиц Microsoft Excel и других документов будет сокращен на один день. Исправляя этот переход займет много времени и усилий, особенно в формулах, которые используют даты.
  • некоторые функции, такие как функция Weekday, будет возвращать различные значения; это может вызвать формул на листах к неправильной работе.
  • исправлять такое поведение нарушило бы серийный дата совместимости между Microsoft Excel и других программах, которые используют даты.

если проблема не устраняется, возникает только одна проблема:

  • функция Weekday возвращает неверные значения для дат до 1 марта, 1900. Потому что большинство пользователей не использовать даты до 1 марта 1900 года, эта проблема является редкостью.
Комментарии (3)

Вот причину объяснил сам Джоэл: мой первый BillG комментарий

основные использует 31 декабря 1899 года, как эпоху, а не 1 января 1900 года, но по какой-то причине, сегодня's дата была такой же в Excel, как это было в основные.

да?

Я пошел, чтобы найти разработчика для Excel, который был достаточно стар, чтобы помнить, почему. Эд Фрис, казалось, знал ответ.

"О," он сказал мне. на "выезд 28-го февраля 1900 года.&и"

"Это'ы 59," Я сказал.

"и сейчас попробовать 1 марта.&и"

"Это'ы 61!&и"

"Что случилось с 60?&я спросил Эд.

"по 29 февраля. 1900 был високосным! Это's не делится на 4!&и"

"Какая хорошая догадка, но нет сигары, и" Эд сказал, и оставил меня интересно В то время.

Упс. Я сделал некоторые исследования. Годы, делящиеся на 100, не > в високосные годы, если они не're также делится на 400.

В 1900 была'т високосный год.

"Это'ы ошибка в Excel!" я воскликнул.

и"Ну, не совсем," сказал Эд. "Мы должны делать это таким образом, потому что нам нужно , Чтобы быть в состоянии импортировать лотоса 123 листах.&и"

"так, это'ы ошибка в Lotus 123?&и"

"Да, но, вероятно, намеренным один. Лотос должен был поместиться в 640К. что's не много памяти. Если вы игнорируете 1900, вы можете выяснить, если В данный год является високосным, просто глядя, чтобы увидеть, если правый два бита равны нулю. Что's действительно быстро и легко. Лотос ребята наверное, понял, что ничего'т имеет значения, считалось, что эти два месяца пути В прошлом.

Комментарии (1)

Одним из решений этой проблемы является добавление 400 лет до года, для работы в будний день, как в следующей формуле =День(дата(А4+400,В4,С4),1) так что если А4 =1834 В4 = 12 С4 = 14 это будет возвращать 1 (воскресенье) который так же как и на 14 декабря 2234 Это перестает работать для дат до 1753 года после перехода на Григорианский календарь

Комментарии (0)