![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
DetailsBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 10. Boost.Date_Time
|
Category | Description |
---|---|
Functions | |
Interfaces | Предоставить конкретные классы для манипулирования датами и временем |
| |
Calculation | Создание основы для эффективного расчета времени |
| |
Representation Flexibility | Обеспечить максимально возможное повторное использование и гибкость |
| |
Date Calculations | Предоставить инструменты для расчета даты |
| |
Time Calculations | Предоставить конкретные классы для манипулирования временем |
| |
Clock Interfaces | Предоставить классы для извлечения времени текущего времени |
| |
I/O Interfaces | Предоставлять вход и выход в течение времени, включая |
|
Библиотека делает все возможное, чтобы предоставить все, что может захотеть пользователь, но есть определенные неотъемлемые ограничения, которые ограничивают то, что может сделать любая временная библиотека. В частности, пользователь должен выбрать, какие из следующих трех возможностей необходимы в конкретном приложении:
Некоторые библиотеки могут неявно пообещать доставить все три, но если вы действительно подвергнете их испытанию, только две могут быть верными одновременно. Это ограничение не является недостатком при проектировании или внедрении какой-либо конкретной библиотеки; скорее оно является следствием того, как различные системы времени определяются международными стандартами. Рассмотрим каждый из трех случаев:
Если вы хотите точного согласования с настенным временем, вы должны использовать UTC или местное время. Если вы вычислите продолжительность, вычитая одно время UTC из другого, и вы хотите получить точный ответ на второй, два раза не должны быть слишком далеко в будущем, потому что високосные секунды влияют на подсчет, но определяются только за 6 месяцев. При местном времени расчет будущей продолжительности может быть отложен на целый час, поскольку законодательные органы могут изменять правила DST по своему усмотрению.
Если вы хотите справиться с настенными часами в будущем, вы не сможете (в общем случае) рассчитать точную продолжительность по тем же причинам, которые описаны выше.
Если вам нужны точные вычисления с будущим временем, вам придется использовать TAI или эквивалент, но отображение от TAI до UTC или местного времени зависит от секунд прыжка, поэтому у вас не будет точного согласия с временем настенных часов.
Вот некоторые основные теории, которые помогают объяснить, что происходит. Помните, что временный тип, как и любой абстрактный тип данных (ADT), представляет собой набор значений вместе с операциями на этих значениях.
Представление типа являетсястабильным, если битовый рисунок, связанный с заданным значением, не изменяется с течением времени. Тип с нестабильным представлением вряд ли будет кому-то полезен, поэтому мы будем настаивать на том, что любая временная библиотека использует только стабильные представления.
Операция по типу является стабильной, если результат применения операции к конкретному операнду(ам) не изменяется с течением времени.
Наборы чаще всего подразделяются на две категории: четко определенные и плохо определенные. Поскольку тип является набором, мы можем расширить эти определения, чтобы охватить типы. Для любого типа T должен быть предикат- член(x), который определяет, является ли значение x членом типа T. Этот предикат должен вернутьсяистинным, ложным,илине знающим.
Если для всех x, is_member(x) возвращает либо истинное, либо ложное, мы говорим, что множество Tчетко определено.
Если для какого-либо x, is_member(x) returns dont_know, мы говорим, что множество Tплохо определено.
Это правила, которые обычно используются в математике. Однако из-за особых характеристик временных типов полезно уточнить эту точку зрения и создать третью категорию следующим образом:
Для любого временного типа T должен существовать предикат— член(x, t), который определяет, является ли значение x членом T. Параметр t представляет время, когда оценивается предикат. Для каждого xiдолжно быть время tiи значение v, такое, что:
Таким образом, ti— это время, когда мы «узнаем», является ли xiчленом T. Теперь мы можем определить три категории временных типов:
Если для всех xi, ti= отрицательная бесконечность, мы говорим, что тип Tпредсказуем.
Если для некоторых xi, ti= положительная бесконечность, мы говорим, что тип Tплохо сформирован.
В противном случае мы говорим, что тип Tнепредсказуем(это означает, что для некоторых xi, tiявляется конечным).
Плохо сформированные наборы не имеют большого практического применения, поэтому мы не будем обсуждать их дальше. В простом английском языке выше просто говорится, что все значения предсказуемого типа известны заранее, но некоторые значения непредсказуемого типа не известны до определенного времени.
Предсказуемые типы имеют несколько важных свойств:
Практический эффект этого заключается в том, что вычисления продолжительности могут быть реализованы с простым целым вычитанием. Примерами предсказуемых типов являются временные точки TAI и григорианские даты.
Непредсказуемые типы обладают прямо противоположными свойствами:
Примерами непредсказуемых типов являются точки времени UTC и локальные точки времени.
Мы можем немного уточнить это, сказав, что диапазон в непредсказуемом типе может быть предсказуемым, и операции, выполняемые полностью на значениях в этом диапазоне, будут стабильными. Например, диапазон точек времени UTC от 1970-01-01 до настоящего времени предсказуем, поэтому расчеты длительностей в этом диапазоне будут стабильными.
Эти ограничения проблематичны, потому что важные временные типы, такие как UTC и Local Time, на самом деле непредсказуемы, и поэтому операции над ними иногда нестабильны. Тем не менее, в практическом плане мы часто хотим выполнять такие операции, как вычисление продолжительности между двумя точками времени в будущем, которые указаны в локальном времени.
Лучшее, что может сделать библиотека, — это обеспечить приближение, которое обычно возможно и для большинства целей будет достаточно хорошим. Конечно, в документации должно быть указано, когда ответ будет приблизительным (и, следовательно, нестабильным) и насколько большой может быть ошибка. Во многих отношениях вычисление с непредсказуемыми наборами аналогично использованию чисел с плавающей точкой, для которых результаты, как ожидается, будут только приблизительно правильными. Затем вычисление с помощью предсказуемых наборов будет аналогично пользователю целых чисел, где результаты, как ожидается, будут точными.
Для ситуаций, когда требуются точные ответы или нестабильность не может быть допущена, пользователь должен иметь возможность указать это, а затем библиотека должна выбросить исключение, если пользователь запрашивает вычисления, для которых точный, стабильный ответ невозможен.
Ниже приведен ряд терминов, относящихся к домену даты-времени.
Таксономия временных типов:
И некоторые другие термины:
Стандартная терминология даты:
Еще несколько экспериментальных:
Это дизайнерские термины:
Дизайн библиотеки в настоящее время разрабатывается с использованием Wiki и электронной почты. Более подробную информацию можно найти по адресу:Boost Wiki GDTL Start Page.
Overview -- Compilation Options -- Compiler/Portability Notes -- Directory Structure -- Required Boost Libraries
Библиотека имеет несколько функций, которые требуют создания библиотечного файла (в основном To_string, From_string). Большинство пользователей библиотеки могут эффективно использовать библиотеку БЕЗ создания библиотеки, но просто включив необходимые заголовки. Если библиотека необходима, Jamfile в каталоге сборки будет создавать «статическую» библиотеку (libboost_date_time) и «динамическую/общую» библиотеку (boost_date_time), которая содержит эти функции. Обратите внимание, что для использования библиотеки без библиотеки (особенно на окнах) может потребоваться использование флага BOOST_DATE_TIME_NO_LIB для вариантов компиляции.
По умолчанию система posix_time использует одно 64-битное целое число для обеспечения разрешения микросекундного уровня. В качестве альтернативы, комбинация 64-битного целого и 32-битного целого (96-битное разрешение) может использоваться для обеспечения разрешений наносекундного уровня. Реализация по умолчанию может обеспечить лучшую производительность и более компактное использование памяти для многих приложений, которые не требуют наносекундного разрешения.
Для использования альтернативного разрешения (96 бит наносекунд) переменная<BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
>должна быть определена в библиотеке пользователей проектных файлов (т.е. Makefile, Jamfile и т.д.). Этот макрос не используется григорианской системой и поэтому не имеет никакого эффекта при строительстве библиотеки.
На версии 1.33 библиотека date_time представила новую потоковую систему ввода-вывода. Некоторые компиляторы не могут использовать эту новую систему. Для этих составителей более раннее («наследие») Система IO все еще доступна. Неподдерживаемые компиляторы автоматически выбирают унаследованную систему, но пользователь может принудительно использовать унаследованную систему, определив<USE_DATE_TIME_PRE_1_33_FACET_IO
>.
Для удобства<date_time
>предоставил некоторыедополнительные типы продолжительности. Использование этих типов может привести к неожиданным результатам из-за поведения в течение месяца (см.Обратимость ловушки операцийдля полных деталей и примеров). Эти типы включены по умолчанию. Чтобы отключить эти типы, просто отключите<BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
>в файле проекта.
Еще одно удобство — конструкторы по умолчанию для<date
>и<ptime
>. Эти конструкторы включены по умолчанию. Чтобы отключить их, просто определите<DATE_TIME_NO_DEFAULT_CONSTRUCTOR
>в файле проекта.
Библиотека Boost Date-Time была построена и протестирована со многими компиляторами и платформами. Однако некоторые компиляторы и стандартные библиотеки имеют проблемы. Хотя некоторые из этих проблем могут быть решены, другие трудно решить. Известно, что следующие компиляторы полностью поддерживают все аспекты библиотеки:
К сожалению, у компилятора VC8 есть некоторые проблемы с кодом даты. Наиболее серьезной проблемой является утечка памяти, которая была введена в стандартный библиотечный код VC8 basic_stream. Код был изменен, чтобы избежать этого, но если вы используете устаревшую опцию ввода-вывода (не по умолчанию с VC8), проблема все еще может возникнуть. См.архив рассылкидля более подробной информации.
В дополнение к вышеприведенной проблеме, некоторые версии библиотеки VC8 ограничили диапазон допустимых значений в структуре<std::tm
>положительными значениями. Это было новое ограничение, добавленное в VC8. Результатом является то, что даты до 1900 года будут вызывать исключения. К сожалению, в этом вопросе нет простого обходного пути. Обратите внимание, что новая 64-битная версия компилятора VC8, похоже, не имеет этого ограничения.
Эти компиляторы поддерживают все аспекты библиотеки, кроме вывода<wstring/wstream
>.
В частности, отсутствие поддержки стандартных локализаций ограничивает способность библиотеки поддерживать входной выход на основе iostream. Для этих компиляторов предусмотрен набор более ограниченных строк на основе ввода-вывода. Некоторые компиляторы/стандартные библиотеки с этим ограничением включают:
Официальная поддержка некоторых старых компиляторов была прекращена. Это включает в себя:
Существует известная проблема с Visual Studio (7.0 & 7.1) и STLPort. Ошибки сборки обычно ссылаются на проблему типа или «неприемлемое преобразование» и пытаются создать шаблон с помощью<wchar_t
>. По умолчанию сборка STLPort не поддерживает<wchar_t
>. Есть два возможных обходных пути для этого вопроса. Самое простое заключается в том, что пользователь может создавать дату_время без широкого потока/струн и т.д. Другой вариант — восстановление STLPort с поддержкой wchar_t.
Чтобы построить date_time без широкого потока/струн и т.д., выполните следующую команду из<$BOOST_ROOT
>:
bjam -a "-sTOOLS=vc-7_1-stlport" "-sSTLPORT_PATH=..." \ "-sBUILD=<define>BOOST_NO_STD_WSTRING" \ --stagedir=... --with-date_time stage
(Замените эллипс правильными дорожками для системы сборки и при необходимости настройте<TOOLS
>на соответствующий набор инструментов)
Восстановление STLPort с поддержкой<wchar_t
>включает размещение</Zc:wchar_t
>в файле STLPort. Дата_время должно быть построено со следующей командой от<$BOOST_ROOT
>:
bjam -a "-sTOOLS=vc-7_1-stlport" "-sSTLPORT_PATH=..." \ "-sBUILD=&native-wchar_t>on" \ --stagedir=... --with-date_time stage
(Замените эллипс правильными дорожками для системы сборки и при необходимости настройте<TOOLS
>на соответствующий набор инструментов)
Дерево каталога имеет следующую структуру:
/boost/date_time -- common headers and template code /boost/date_time/gregorian -- Gregorian date system header files /boost/date_time/posix_time -- Posix time system headers /boost/date_time/local_time -- Local time system headers /libs/date_time/build -- build files and output directory /libs/date_time/test -- test battery for generic code /libs/date_time/test/gregorian -- test battery for the Gregorian system /libs/date_time/test/posix_time -- test battery for the posix_time system /libs/date_time/test/local_time -- test battery for the local_time system /libs/date_time/examples/gregorian -- example programs for dates /libs/date_time/examples/posix_time -- time example programs /libs/date_time/examples/local_time -- nifty example programs /libs/date_time/src/gregorian -- cpp files for libboost_date_time /libs/date_time/src/posix_time -- empty (one file, but no source code...)
Различные части времени зависят от других библиотек. К ним относятся:
Эти библиотеки должны быть установлены.
Библиотека предоставляет большое количество тестов в
libs/date_time/test libs/date_time/test/gregorian libs/date_time/test/posix_time libs/date_time/test/local_time
Каталоги. Создание и выполнение этих тестов гарантирует правильность установки и правильное функционирование библиотеки. Кроме того, эти тесты облегчают перенос на новые компиляторы. Наконец, тесты предоставляют примеры многих функций, явно не описанных в примерах использования.
Type | Description |
---|---|
исправление ошибок | В настоящее время спецификаторы форматов «%T» и «%R» обрабатываются библиотекой, а не стандартным аспектом. Это фиксирует случаи, когда заполнители не поддерживаются гранью#3876. |
Type | Description |
---|---|
Изменения | Формат по умолчанию для длительностей времени теперь «%-%O:%M:%S%F» вместо «%-%H:%M:%S%F», который использовался ранее. Чтобы сохранить старое поведение, строка формата должна быть четко указана во время построения грани IO#1861. |
исправление ошибок | Грегорианские даты теперь используют 32-битный целочисленный тип внутри на 64-битных платформах#3308. |
исправление ошибок | Скорректированные границы смещения часового пояса UTC для обеспечения смещения до +14 часов#2213. |
Type | Description |
---|---|
исправление ошибок | Незначительные исправления ошибок#2809,#2824,#3015,#3105и другие. |
Type | Description |
---|---|
Особенность | Добавлена поддержка форматирования и чтения длительностью более 24 часов. Используется новый формататор<%O >, указывающий такие длительные периоды в строке формата. Таким образом, старый спецификатор формата<%H >ограничивается представлением длительностей, которые вписываются в два символа, чтобы сохранить поддержку продолжительности чтения в формате ISO. В случае обнаружения того, что используется спецификатор формата<%H >с большей продолжительностью, результаты не уточняются (поднимается утверждение в сборках отладки). |
исправление ошибок | Добавлена поддержка GCC 4.3. Было решено несколько вопросов компиляции, а также учтены предупреждения компилятора. |
исправление ошибок | Добавлены недостающие потоковые операторы для класса<local_time_period >. |
исправление ошибок | Добавлено несколько недостающих включений в разных местах. Некоторые включения, которые не нужны в некоторых конфигурациях, были сделаны условными. |
исправление ошибок | Решена проблема компиляции, вызванная отсутствием потоковых операторов<gregorian::date_duration >через ADL. В настоящее время этот тип фактически является классом, а не типдефом для шаблона<date_time::date_duration >. Похожие изменения произошли и в<gregorian::weeks >. |
исправление ошибок | Добавлена правильно написанная<date_time::hundredth >временная резолюция. Старый<date_time::hundreth >считается устаревшим и должен быть удален в будущих выпусках. |
исправление ошибок | Исправленная ошибка компиляции в<format_date_parser.hpp >из-за неправильного типа потока. |
исправление ошибок | На платформе Windows включено<windows.h >опционально. Заголовок используется только при определении макроса<BOOST_USE_WINDOWS_H >. В противном случае (и по умолчанию) библиотека использует внутренние определения символов из этого заголовка. |
исправление ошибок | На платформе Windows функция<from_ftime >может возвращать неправильное время, если<FILETIME >, который передается функции, содержал даты до 1970-ян-01. |
исправление ошибок | Исправлен возможный сбой в<gregorian::special_value_from_string >, если строка не представляла действительного специального значения. |
исправление ошибок | Удаление файла<testfrmwk.hpp >из общедоступного каталога. Этот файл был внутренним для библиотечных тестов и не был задокументирован. |
исправление ошибок | Исправленное пропущенное включает в себя<filetime_functions.hpp >#2688. |
исправление ошибок | Фиксированные итераторы конечных строк в разных местах кода, которые могут вызвать сбои в MSVC#2698. |
Type | Description |
---|---|
Особенность | Обновленные данные в файле date_time_zonespec.csv отражают новые правила экономии времени в США/Канаде на 2007 год. Если вы обновитесь до нового файла, имейте в виду, что библиотека даст только правильные ответы на текущие / будущие конверсии даты. Таким образом, если вы конвертируете даты предыдущих лет, ответы будут отражать текущие правила часового пояса, а не прошлые правила. В настоящее время библиотека не поддерживает исторические правила часового пояса. |
Особенность | Две другие функции расчета dst также были обновлены, чтобы отразить новые правила тимзоны США / Канады. Это ускорение::date_time::us_dst_rules и dst_calc_engine. В то время как правила us_dst_rules официально обесценены, был применен патч Грэма Беннетта, который позволяет этому классу работать правильно как для исторических, так и для будущих дат. Двигатель dst_calc_engine был обновлен для работы в исторические и будущие времена. Это позволяет различным классам local_adjustor работать правильно. Произошло изменение интерфейса для классов, использующих dst_calc_engine с пользовательскими классами черт dst. Сигнатуры классов признаков были изменены на параметр «год» для большинства методов, таких как «конец месяца». Кроме того, необходимы 2 новые функции на классах признаков:<static date_type local_dst_start_day(year_type year) >и<static date_type local_dst_end_day(year_type year) >. В качестве примеров можно привести<date_time/local_timezone_defs.hpp >. |
Баг Фикс | Исправьте черты DST для Австрии (sf # 1672139), чтобы установить конец DST в 3:00 утра вместо 2:00 утра. |
Баг Фикс | Исправьте проблему с потенциальной ошибкой связывания с несколькими определениями из-за кода ввода/вывода. |
Баг Фикс | Изменен код сериализации в greg_serialize.hpp и time_serialize.hpp для устранения предупреждений из-за неиспользуемых переменных для версии и file_version. Спасибо Калебу Эпштейну за предложение пластыря. |
Баг Фикс | Исправьте регрессионные ошибки, которые появились в FreeBSD, с помощью GCC и среды LANG, установленной на русском языке, — измените парсер, чтобы использовать классический локальный код вместо пустого. |
Баг Фикс | Изменения в выпуске трекера 1178092 - изменение в конверте_to_lower, чтобы сделать локальный конст статическим и ускорить разбор. |
Баг Фикс | Патчи от Ульриха Экхардта для исправления поддержки EVC++ 4. |
Особенность | Сократите использование basic_stringstream настолько, насколько это возможно, чтобы обойти ошибку в стандартной библиотеке VC8. См.архив рассылкидля получения дополнительной информации. |
Type | Description |
---|---|
Баг Фикс | Продолжительность периода, когда начальные и конечные точки одинаковы или являются последовательными, была неправильно рассчитана. Исправленное поведение, при котором конечные и начальные точки равны или период создается с нулевой продолжительностью, теперь возвращает длину нуля. Период, в котором начальные и конечные точки являются последовательными, возвращает длину единицы. |
Баг Фикс | В Time_input_facet отсутствовали функции настройки изо-форматов. Он также не смог разобрать временные значения, которые не использовали сепаратор (%H%M%S). Обе эти ошибки были исправлены. |
Особенность | Предварительные названия ptime_facet и ptime_input_facet были изменены на time_facet и time_input_facet. Все версии ptime_* были удалены. |
Особенность | Функция from_iso_string не смогла разобрать дробные цифры. Мы добавили код, который правильно парсирует, когда на входе больше цифр или слишком мало цифр, что составляет точность библиотеки. Время с только десятичным числом также правильно разбирается. |
Баг Фикс | Механизм разбора в новом IO будет потреблять следующего персонажа после того, как был сделан матч. Эта ошибка появилась при попытке разобрать период, который имел особое значение для начальной точки. |
Баг Фикс | Новая система ввода-вывода не смогла предоставить пользователю возможность «включить» исключения в потоке. Файлбит также не был установлен, когда парсинг не удался. Обе эти проблемы были решены. |
Баг Фикс | Зафиксировано парсирование специальных значений с помощью _*_струнных функций. Это также влияет на способность библиотек чередовать специальные значения. Time_duration теперь сериализуется как строка или отдельные поля (в зависимости от is_special()). |
Баг Фикс | Раньше выходная потоковая передача<partial_date >отображала день как одно или двузначное целое число (т.е. «1» или «12»). Это было исправлено, чтобы всегда отображать двузначное целое число (т.е. 01). |
Особенность | Основные новые функции, связанные с управлением местным временем. Это включает в себя введение серии новых классов для представления часовых поясов и местного времени (см.Дата Время Местное Времядля полных деталей). |
Особенность | Аспекты ввода и вывода были переписаны для поддержки форматного переопределения форматов (см.Date Time IOдля полных деталей). |
Особенность | Функции были добавлены для облегчения преобразования между<tm >структурами для<date >,<ptime >,<time_duration >и<local_date_time >. Также предусмотрены функции преобразования<FILETIME >и<time_t >в<ptime >. Смотрите отдельные разделы для деталей. |
Особенность | В<microsec_time_clock >добавлена функция<universal_time >(полные детали этой функции можно найти здесь). |
Особенность | Функции были добавлены для облегчения преобразования между<tm >структурами для<date >,<ptime >,<time_duration >и<local_date_time >. Также предусмотрены функции преобразования<FILETIME >и<time_t >в<ptime >. Смотрите отдельные разделы для деталей. |
Особенность | В<microsec_time_clock >добавлена функция<universal_time >(полные детали этой функции можно найти здесь). |
Особенность | Datetime теперь использует функции POSIX на тех платформах, которые поддерживают их при определении BOOST_HAS_THREADS. |
Баг Фикс | Исправлена ошибка в коде сериализации, где специальные значения (не-дата-время, бесконечности и т.д.) для ptime, time_duration не будут корректно считываться из архива. На выходе код сериализации записывал подполя, такие как time_duration. секунды (), которые являются недействительными для специальных значений и, следовательно, неопределенных значений. Таким образом, при повторном прочтении значения могут вызвать странное поведение, в том числе и представления о конструкции. |
Баг Фикс | Фиксированные множественные предупреждения, генерируемые различными платформами/компиляторами. |
Баг Фикс | Конструкция ptime с временной длительностью за пределами диапазона 00:00 до 23:59:59.9 ... теперь корректирует дату и время, чтобы сделать временную продолжительность подпадающей под этот диапазон (т.е.<ptime(date(2005,2,1), hours(-5)) >->"2005-Jan-31 19:00:00" &<ptime(date(2005,2,1), hours(35)) >->"2005-Feb-02 11:00:00"). |
Баг Фикс | Разбор времени теперь правильно обрабатывает чрезмерные цифры в течение дробных секунд. Ведущие нули сбрасываются («000100» ->100 frac_sec), а избыточные цифры усечены в нужном месте («123456789876» ->123456 или 123456789) В зависимости от того, с какой точностью была составлена библиотека. |
Баг Фикс | Изменения в интерфейсе<boost::serialization >нарушили совместимость сериализации<date_time >. Пользователь должен предоставить функцию для обеспечения<date_time >объектов<const >, прежде чем они будут сериализованы. Функция должна быть аналогичной:<template<class archive_type, class temporal_type> void save_to(archive_type& ar, const temporal_type& tt) { ar << tt; }> |
Баг Фикс | Использование недорогого<boost::tokenizer >интерфейса было обновлено до текущего интерфейса. Это устраняет ошибки компилятора на некоторых старых компиляторах. |
Баг Фикс | Шаблонные формататоры в устаревшей системе ввода-вывода для принятия типа char. Также удалены звонки на<boost::lexical_cast >. |
Type | Description | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Баг Фикс | Повторите до конца месяца поведение, исправленное для year_functor. Ранее, начиная с 2000-28 февраля (високосный год, а не конец месяца) и повторяясь в течение следующего високосного года, результатом будет 2004-29 февраля вместо 2004-28 февраля. Это поведение было исправлено, чтобы получить правильный результат 2004-28 февраля. Спасибо Барту Гарсту за это изменение. | ||||||||||||||||||
Особенность | Бесплатная функция для создания объекта ptime из структуры FILETIME. Эта функция доступна только на платформах, которые определяют BOOST_HAS_FTIME. | ||||||||||||||||||
Особенность | Микросекундные часы теперь доступны на большинстве компиляторов Windows и Unix. | ||||||||||||||||||
Особенность | Использование библиотеки boost::serialization теперь доступно в большинстве классов date_time. Классы, способные к сериализации: date_generator classs, date, days, date_period, greg_month, greg_weekday, greg_day, ptime, time_duration, time_period. Спасибо Барту Гарсту за это изменение. | ||||||||||||||||||
Особенность | Функции, добавленные для преобразования классов даты и времени в строку. Библиотека теперь предоставляет функции to_*_wstring, а также to_*_string для: simple, iso, iso_extended и sql для дат и компиляторов, поддерживающих wstrings. Спасибо Барту Гарсту за это изменение. | ||||||||||||||||||
Особенность | Периодические классы теперь обрабатывают нулевую длину и нулевые периоды правильно. NULL – это период с отрицательной длиной. Спасибо Фрэнку Вольфу и Барту Гарсту за эти изменения. | ||||||||||||||||||
Особенность | Добавлена функция end_of_month для gregorian::date для возврата последнего дня текущего месяца, представленного датой. Результат не определен для not_a_date_time или бесконечностей. | ||||||||||||||||||
Баг Фикс | Неправильное использование макроса BOOST_NO_CWCHAR в библиотеке. | ||||||||||||||||||
Особенность | Новые имена добавлены для некоторых классов даты. Оригинальные названия все еще действительны, но могут быть обесценены. Изменения:
|
||||||||||||||||||
Особенность | Добавлены бесплатные функции для генераторов дат. Функции: days_until_weekday, days_before_weekday, next_weekday и previous_weekday.<days days_until_weekday(date, greg_weekday); days days_before_weekday(date, greg_weekday); date next_weekday(date, greg_weekday); date previous_weekday(date, greg_weekday);>Спасибо Барту Гарсту за это изменение. |
||||||||||||||||||
Особенность | Новые экспериментальные типы продолжительности добавляются в течение месяцев, лет и недель. Эти классы также предоставляют математические операторы для использования с классами даты и времени. Имейте в виду, что добавление месяцев или лет в течение 28-го числа месяца может показать ненормальные математические свойства. Это результат «конца месяца», используемого в расчете. Последний пример ниже иллюстрирует проблему.<months m(12); years y(1); m == y; // true days d(7); weeks w(1); d == w; // true ptime t(...); t += months(3); date d(2004,Jan,30); d += months(1); //2004-Feb-29 d -= months(1); //2004-Jan-29>Ввод потоковой передачи пока не реализован для этих типов. Спасибо Барту Гарсту за это изменение. |
||||||||||||||||||
Особенность | Объединение базового класса для генераторов date_generators в григорианское пространство имен. См.Print Holidays Example. | ||||||||||||||||||
Особенность | Добавлены конструкторы по дате и времени, которые допускают строительство по умолчанию (как) и строительство специальных значений (время, оба теперь поддерживают это). Конструкторы по умолчанию инициализируют объекты до not_a_date_time (NADT).<ptime p_nadt(not_a_date_time); ptime p_posinf(pos_infin); ptime p; // p == NADT date d; // d == NADT>Спасибо Барту Гарсту за это изменение. |
||||||||||||||||||
Особенность | Выходная потоковая передача теперь поддерживает широкий выходной поток на комбинациях компилятора / стандартной библиотеки, которые поддерживают широкие потоки. Позволяет кодировать:<std::wstringstream wss; date d(2003,Aug,21); wss << d;>Спасибо Барту Гарсту за это изменение. |
||||||||||||||||||
Особенность | Вводная потоковая передача для типов даты и времени теперь поддерживается как на широких, так и на узких потоках:<date d(not_a_date_time); std::stringstream ss("2000-FEB-29"); ss >> d; //Feb 29th, 2000 std::wstringstream ws("2000-FEB-29"); ws >> d; //Feb 29th, 2000>Спасибо Барту Гарсту за это изменение. |
||||||||||||||||||
Баг Фикс | Исправленная ошибка в long_from_string(), где строка, отформатированная с меньшим, чем полное количество дробных цифр, создала неправильный time_duration. При микросекундном разрешении для длительностей времени строка «1:01:01.010» создала длительность времени 01:01:01.000010 вместо 01:01:01.010000 | ||||||||||||||||||
Баг Фикс | Исправлен специальный конструктор значений для gregorian::date и posix_time::ptime при построении с min_date_time или max_date_time. Неправильная стоимость была создана для них. |
Type | Description |
---|---|
Баг Фикс | Обновленная конфигурация сборки, статически и динамически связываемые библиотечные файлы теперь производятся с компиляторами MSVC. Подробнее см.Информация о сборке/компиляторе. |
Баг Фикс | Time_duration from_string теперь правильно построен из отрицательного значения. (т.е. "-0:39:00.000") Код, предоставленный Бартом Гарстом. |
Баг Фикс | Исправлено множество предупреждений компилятора MSVC при составлении с уровнем предупреждения 4. |
Особенность | Добавлен префикс оператора декремента (--) для итераторов даты и времени. Подробнее см.Итераторы временииИтераторы даты. Код предоставлен Бартом Гарстом. |
Особенность | Функциональность Special_values добавлена для классов date_duration, time_duration и time. Код предоставлен Бартом Гарстом. |
Баг Фикс | Fixed time_duration_traits calculation bug, который ограничивал время до 32-битного диапазона, даже когда было доступно 64 бита. Спасибо Джо де Гусману за то, что выследил это. |
Баг Фикс | Предоставляются дополнительные операторы для типов продолжительности (например: date_duration, time_duration). Это включает в себя делимое на целое число и исправления, позволяющие операторам +=, -=. Спасибо Барту Гарсту за то, что написал этот код. Также улучшена документацияРасчетов. |
Баг Фикс | Добавлены typedefs для повышения::gregorian gregorian_types.hpp различные классы функций date_generator. |
Особенность | Добавлена функция from_time_t для преобразования time_t в ptime. |
Особенность | Добавлена функция пролета для комбинирования периодов. См.период датыипериод временидок. |
Особенность | Добавлена функция time_duration, чтобы получить общее количество секунд в длительности усечения любых дробных секунд. Кроме того, были добавлены другие разрешения, позволяющие легко конвертировать. Например,<seconds(1).total_milliseconds() == 1000 seconds(1).total_microseconds() == 1000000 hours(1).total_milliseconds() == 3600*1000 //3600 sec/hour seconds(1).total_nanoseconds() == 1000000000> |
Особенность | Добавлены операторы потокового вывода для классовгенератора дат— partial_date, first_kday_after, first_kday_before и т. Спасибо Барту Гарсту за эту работу. |
Особенность | Добавлены унарные операторы для длительностей для обращения знака длительности времени. Например:<time_duration td(5,0,0); //5 hours td = -td; //-5 hours>Спасибо Барту Гарсту за эту работу. |
Особенность | Добавлена поддержка разбора строк с «названиями месяцев». Таким образом, создание объекта даты из строки теперь принимает несколько форматов («2003-10-31», «2003-Окт-31», «2003-Октябрь-31»). Таким образом, теперь разрешена дата d = от_simple_string ("2003-27 февраля"). Плохая строка имени месяца (от _simple_string (2003-SomeBogusMonthName-27)) вызовет исключение плохого месяца. На большинстве компиляторов сравнение строк является нечувствительным. Спасибо Барту Гарсту за эту работу. |
Особенность | В дополнение к поддержке названий или номеров месяцев были добавлены функции для создания объектов даты из многоупорядоченных строк дат. Экс: «Январь-21-2002», «2002-Ян-21», «21-Ян-2003». См.Дата Классдля более подробной информации. |
Баг-фикс | Различные исправления документации. Спасибо Барту Гарсту за обновления. |
Обратите внимание: был изменен интерфейс класса part_date (см.date_algorithms). Изменился порядок параметров конструкции, что приведет к неисполнению некоторого кода. Это изменение было сделано для облегчения более общего кода корректировки местного времени. Таким образом, вместо указания part_date pd(Dec,25) код необходимо изменить на partial_date pd(25, Dec);
Type | Description |
---|---|
Баг Фикс | Добавлена новая экспериментальная функция для расчетов дневного света. Это позволяет определять характеристики, основанные на правилах dst. |
Особенность | Добавлены новые интерфейсы для расчета юлианского дня и изменены юлианский день на григорианский класс даты. См.бустер::gregorian::date. |
Особенность | Добавить новый интерфейс для вычисления числа недели ISO 8601 для даты. См.бустер::gregorian::date. |
Особенность | Добавить функцию анализа времени изо 8601 (например: YYYYMMDDTHHHMMSS). СмотриКласс ptimeдля получения дополнительной информации. |
Особенность | Добавлена функция длины шаблона периода так, что и date_periods, и time_periods теперь будут поддерживать эту функцию. |
Баг Фикс | Разделите Jamfiles так, чтобы libs/date_time/build/Jamfile создавала только библиотеку и /libs/date_time/libs/test/Jamfile, которая запускает тесты. |
Баг Фикс | Исправлено много мелких проблем с документацией. |
Баг Фикс | Удалил макрос DATE_TIME_INLINE, который вызывал ошибки ссылок. Этот макрос больше не нужен в проектах, использующих библиотеку. |
Баг Фикс | Добавлен недостающий typedef for year_iterator togregorian_types.hpp |
Баг Фикс | Исправлена проблема с григорианскими операторами потоков, которые препятствовали использованию широких потоков. |
Баг-фикс | Усильте обработку ошибок для дат, так что дата (2002, 2, 29) приведет к исключению плохого дня из месяца. Раньше дата была неправильно построена. Об этом сообщает sourceforge bug: 628054. |
Многие люди внесли свой вклад в развитие этой библиотеки. В частности, Хьюго Дункан и Джоэл де Гусман за помощь в портировании на различные компиляторы. За первоначальную разработку концепций и дизайна Корвин Джой и Майкл Кеннистон заслуживают особой благодарности. Также большое спасибо Майклу за написание теории и компромиссов в документации. Дэйв Зумбро за вдохновение и мудрые мысли. Многие благодаря повышению рецензентов и пользователей, в том числе: Уильям Сеймур, Кьелл Элстер, Беман Дауэс, Гэри Пауэлл, Эндрю Маклин, Уильям Кемпф, Питер Димов, Крис Литтл, Дэвид Мур, Дарин Адлер, Геннадий Розенталь, Йоахим Ахтентер, Пол Бристоу, Ян Лангер, Марк Роджерс, Глен Ноулз, Мэттью Денман и Джордж Хайнцельман.
Статья Details раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 10. Boost.Date_Time может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 10. Boost.Date_Time ::
реклама |