Дата по умолчанию отличается от ожидаемой для переменной Date, инициализированной только временем - PullRequest
0 голосов
/ 29 августа 2018

С переменной Date, по-видимому, по умолчанию она равна January 1, 0001, если вы не вводите дату в литерале даты / времени.

Однако, если я решу отобразить эту дату по умолчанию, она покажет дату December 30, 1899, которая даже не является приемлемой датой в Excel. Вот код:

Sub TimeOfBirth()  
  Dim BirthTime As Date  
  BirthTime = "2:00:00 PM"  
  MsgBox Format(BirthTime, "yyyy-mm-dd")  
End Sub

Может кто-нибудь объяснить это? Я понимаю, что VBA хранит гораздо больший диапазон дат, но я не понимаю, почему отображается December 30, 1899?

Что там за математика / логика?

1 Ответ

0 голосов
/ 29 августа 2018

Excel обрабатывает дату как число. Поскольку вы предоставляете только Время, он предполагает, что Дата = 0.

И дата 0 - 30 декабря 1899 г.

Редактировать


Чтобы ответить на ваш вопрос из комментариев:

  1. Date по умолчанию January 1, 0001 в VB.NET.
  2. Date по умолчанию December 30, 1899 в VBA и сохраняется как 0.
  3. Date = 1 не равно January 1, 1900, но December 31, 1899. January 1, 1900 равно 2. Проверьте код ниже.

    Sub TimeOfBirth()
        MsgBox Format(0, "yyyy-mm-dd") '1899-12-30
        MsgBox Format(1, "yyyy-mm-dd") '1899-12-31
        MsgBox Format(2, "yyyy-mm-dd") '1900-01-01
    End Sub
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...