Почему Excel получает другой результат, чем PowerShell и Google, при попытке узнать, сколько дней прошло с 01.01.1900?

Почему Excel получает другой результат, чем PowerShell и Google, при попытке узнать, сколько дней прошло с 01.01.1900?

Коллега сказал мне: «С 01.01.1900 прошло ровно 43871 день». Сегодня 10.02.2020.

Я хотел проверить это с помощью PowerShell, но получил другой результат:

PS C:\Windows\system32> New-TimeSpan ([datetime]"01.01.1900") (Get-Date)


Days              : 43869
Hours             : 11
Minutes           : 15
Seconds           : 46
Milliseconds      : 304

Так что я был сбит с толку, потому что разница была в 2 дня. Поэтому я спросил у Google всемогущего:

GoogleDaysPassedПоиск

Как видите, Google также сообщает, что прошло 43869 дней, а не 43871.

Поэтому я спросил своего друга, как он это вычислил. Он сделал это в Excel, отформатировав ячейку в dateonly. Когда он затем пишет intв ней , Excel преобразует ее в дату, например

  • 15641становится27.10.1942
  • 19874становится30.05.1954
  • 43869становится 08.02.2020(?)
  • 43871становится 10.02.2020(?)

Excel живет на 2 дня впереди нас или почему он думает, что с 01.01.1900 прошло на 2 дня больше, чем на самом деле? Он что-то упускает?

Вот небольшая гифка (к сожалению, на немецком, так как у меня немецкий Excel):

ExcelРасчетGif

решение1

Почему:

Во-первых, ваш друг и Google ведут расчеты по-разному. Excel (использующий систему дат 1900 года) считает, что с 1900 года есть только один дополнительный день.

Excel хранит даты в виде последовательных чисел, где 1-Jan-1900= 1 и 10-Feb-2020-->43871

Такдней с тех порпо Excel должно быть 43871- 1-->43870

Однако расчет Excel неверен.

Когда появился Excel, Lotus123 была ведущей программой для работы с электронными таблицами.

У Lotus 123 была ошибка, из-за которой он считал 1900 год високосным.

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

Кстати, Excel VBA также правильно рассчитывает разницу дат -->43869

решение2

Microsoft Excel поддерживает две разные системы дат. Это система дат 1900 и система дат 1904.

Система дат 1900 года

В системе дат 1900 первым поддерживаемым днем ​​является 1 января 1900 года. При вводе даты она преобразуется в порядковый номер, представляющий количество прошедших дней, начиная с 1 для 1 января 1900 года. Например, если ввести 5 июля 1998 года, Excel преобразует дату в порядковый номер 35981. По умолчанию Microsoft Excel для Windows использует систему дат 1900. Система дат 1900 обеспечивает лучшую совместимость между Excel и другими программами для работы с электронными таблицами, такими как Lotus 1-2-3, которые предназначены для работы под управлением MS-DOS или Microsoft Windows.

Система дат 1904 года

В системе дат 1904 года первым поддерживаемым днем ​​является 1 января 1904 года. Когда вы вводите дату, она преобразуется в серийный номер, представляющий количество прошедших дней с 1 января 1904 года, начиная с 0 для 1 января 1904 года. Например, если вы вводите 5 июля 1998 года, Excel преобразует дату в серийный номер 34519. Из-за конструкции ранних компьютеров Macintosh даты до 1 января 1904 года не поддерживались. Такая конструкция была предназначена для предотвращения проблем, связанных с тем, что 1900 год не был високосным. Раньше Excel для Macintosh по умолчанию использовал систему дат 1904 года для рабочих книг, созданных на Macintosh. Однако теперь Excel для Macintosh по умолчанию использует систему дат 1900 года и поддерживает даты с 1 января 1900 года.

Разница между системами дат

Поскольку две системы дат используют разные начальные дни, одна и та же дата представлена ​​разными серийными номерами в каждой системе дат. Например, 5 июля 1998 года может иметь два разных серийных номера, как показано ниже.

Date system          Serial number of July 5, 1998
1900 date system     35981
1904 date system     34519

Источник: https://docs.microsoft.com/en-us/office/troubleshoot/excel/1900-and-1904-date-system

Связанный контент