Description
Файл csv, содержащий спецификации зоны, используемыеtz_db_base, предназначен для настройки пользователем библиотеки. При настройке этого файла (или создании собственного) файл должен следовать определенному формату.
Предполагается, что эта первая строка содержит заголовки колонок и поэтому не обрабатывается базойtz_db_.
Каждая запись (линия) должна иметь одиннадцать полей. Некоторые из них могут быть пустыми. Каждое поле (даже пустое) должно быть заключено в двойные цитаты. Экс:
"America/Phoenix" <- string enclosed in quotes
"" <- empty field
Некоторые поля представляют собой промежуток времени. Формат этих полей должен быть:
"{+|-}hh:mm[:ss]" <- length-of-time format
где плюс или минус является обязательным, а секунды необязательными.
Поскольку некоторые часовые пояса не используют экономию дневного света, не всегда необходимо, чтобы каждое поле в спецификации зоны содержало значение. Все спецификации Zone_specs должны иметь смещение по меньшей мере ID и GMT. Зоны, которые используют экономию дневного света, должны иметь все поля, за исключением: STD ABBR, STD NAME, DST NAME. Обратите внимание, что DST ABBR является обязательным для зон, которые используют экономию дневного света (см. описание поля для более подробной информации).
********** Поля и их описание/детали *********
ID: содержит идентифицирующую строку для Zone_spec. Любая струна будет работать, пока она уникальна. Нет двух одинаковых идентификаторов.
STD ABBR: STD имя: DST ABBR: DST имя: Все эти четыре названия и аббревиатуры используются для описания часового пояса. В то время как любая струна будет делать в этих областях, следует соблюдать осторожность. Эти поля содержат строки, которые будут использоваться на выходе многих классов local_time. Экс:
time_zone nyc = tz_db.time_zone_from_region("America/New_York");
local_time ny_time(date(2004, Aug, 30), IS_DST, nyc);
cout << ny_time.to_long_string() << endl;
cout << ny_time.to_short_string() << endl;
ПРИМЕЧАНИЕ: Точные названия формата/функции могут различаться - см. документацию по местному времени для более подробной информации.
Смещение GMT: Это количество часов, добавленных в utc, чтобы получить местное время до внесения каких-либо корректировок экономии дневного света. Примеры: Америка / Нью-Йорк смещения -5 часов; Африка / Каир смещения +2 часа. Формат должен соответствовать формату продолжительности времени, описанному выше.
Корректировка DST: Количество времени, добавленное к gmt_offset, когда экономия дневного света в силе. Формат должен соответствовать формату продолжительности времени, описанному выше.
ДСТ Начинать Правило даты: Это специально отформатированная строка, описывающая день года, в который происходит переход. Он содержит три собственных поля, разделенных полуколонами. Первое поле обозначает «девятый» будний день месяца. Возможные значения: 1 (первый), 2 (второй), 3 (третий), 4 (четвертый), 5 (пятый) и -1 (последний). Второе поле указывает день недели от 0 до 6 (солнце = 0). Третье поле указывает месяц от 1-12 (Ян=1).
Примеры: «-1;5;9» = «Последняя пятница сентября», «2;1;3» = «Второй понедельник марта»
Время начала: Время начала - это количество часов после полуночи, в день стартового перехода, переход происходит. Проще говоря, время суток перехода выполнено (в формате 24 часа). Формат должен соответствовать описанному выше формату длительности времени, за исключением того, что он всегда должен быть положительным.
ДСТ Правило конечной даты: см. DST Правило даты начала. Разница здесь заключается в том, что заканчивается экономия дневного света (переход на ЗППП).
Время окончания: так же, как и время начала.
tz_db_base
public
construct/copy/destruct
- <
tz_db_base();
>Построение пустой базы данных.
tz_db_base
public member functions
- <
voidload_from_stream(std::istream&in);
>Процесс csv файла данных, может выбросить исключения.Майский бросок<bad_field_count
>Исключения
- <
voidload_from_file(conststd::string&pathspec);
>Обработка csv файла данных может привести к исключению.Может ли<data_not_accessible
>или<bad_field_count
>исключения
- <
booladd_record(conststring_type®ion,
boost::shared_ptr<time_zone_base_type>tz);
>возвращает истинное, если запись успешно добавлена на картуПринимает название региона в виде «Америка/Феникс», и объект временной зоны для этого региона. Строка id должна быть уникальным именем, которого нет в базе данных.
- <
boost::shared_ptr<time_zone_base_type>
time_zone_from_region(conststring_type®ion)const;
>Возвращает объект зоны времени, построенный из спецификаций для данного региона.Возвращает объект зоны времени, построенный из спецификаций для данного региона. Если в регионе не существует локального времени::record_not_found исключение будет брошено
- <
std::vector<std::string>region_list()const;
>Возвращает вектор строк, удерживающих области часового пояса в базе данных.
tz_db_base
private member functions
- <
rule_type*parse_rules(conststring_type&sr,conststring_type&er)const;
>Учет спецификаций правил переходного дня
- <
week_numget_week_num(intnth)const;
>функция помощника для parse_rules()
- <
voidsplit_rule_spec(int&nth,int&d,int&m,string_typerule)const;
>делит строку [start |end]_date_rule на 3 ints
- <
boolparse_string(string_type&s);
>Возьмите строку из csv, превратите ее в тип time_zone_type.Возьмите строку из csv, превратите ее в тип временной зоны и добавьте ее на карту. Предполагается, что в файле csv Zone_specs будет одиннадцать полей, описывающих часовой пояс. Возвращается, если Zone_spec успешно добавлен в базу данных