Spec-Zone.ru › Ruby 4.0

Юлианский и григорианский календари

Разница между юлианским календарём и григорианским календарём может иметь значение для вашей программы, если она использует даты, предшествующие переходу.

  • 15 октября 1582 года.

  • 14 сентября 1752 года.

Как правило, одна и та же дата в этих календарях будет различаться.

Разные даты перехода

Причины этих различий связаны с религиозной и политической историей.

  • 15 октября 1582 года несколько стран перешли с юлианского календаря на григорианский; среди них были Италия, Польша, Португалия и Испания. Другие страны западного мира продолжили использовать юлианский календарь.

  • 14 сентября 1752 года большая часть Британской империи перешла с юлианского календаря на григорианский.

Если в вашем коде используется дата, предшествующая этим датам перехода, будет иметь значение, считает ли он датой перехода более раннюю или более позднюю дату (или ни одну из них).

См. также конкретный пример.

Аргумент start

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

  • Date::ITALY (значение по умолчанию): созданная дата относится к юлианскому календарю, если она предшествует 15 октября 1582 года, и к григорианскому в противном случае:

    d = Date.new(1582, 10, 15)
    d.prev_day.julian? # => true
    d.julian?          # => false
    d.gregorian?       # => true
    
  • Date::ENGLAND: созданная дата относится к юлианскому календарю, если она предшествует 14 сентября 1752 года, и к григорианскому в противном случае:

    d = Date.new(1752, 9, 14, Date::ENGLAND)
    d.prev_day.julian? # => true
    d.julian?          # => false
    d.gregorian?       # => true
    
  • Date::JULIAN: созданная дата относится к юлианскому календарю независимо от её значения:

    d = Date.new(1582, 10, 15, Date::JULIAN)
    d.julian? # => true
    
  • Date::GREGORIAN: созданная дата относится к григорианскому календарю независимо от её значения:

    d = Date.new(1752, 9, 14, Date::GREGORIAN)
    d.prev_day.gregorian? # => true
    

Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API