| <?xml version="1.0" encoding="utf-8"?> |
| <!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN" |
| "../../../tools/boostbook/dtd/boostbook.dtd"> |
| |
| <!-- Copyright (c) 2001-2005 CrystalClear Software, Inc. |
| Subject to the Boost Software License, Version 1.0. |
| (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) |
| --> |
| |
| <section id="date_time.examples.simple_time_zone"> |
| <title>Simple Time Zones</title> |
| |
| <para> |
| Example usage of custom_time_zone as well as posix_time_zone. |
| </para> |
| <programlisting> |
| <![CDATA[ |
| /* A simple example for using a custom_time_zone and a posix_time_zone. |
| */ |
| |
| #include "boost/date_time/local_time/local_time.hpp" |
| #include <iostream> |
| |
| int |
| main() |
| { |
| using namespace boost; |
| using namespace local_time; |
| using namespace gregorian; |
| using posix_time::time_duration; |
| |
| /***** custom_time_zone *****/ |
| |
| // create the dependent objects for a custom_time_zone |
| time_zone_names tzn("Eastern Standard Time", "EST", |
| "Eastern Daylight Time", "EDT"); |
| time_duration utc_offset(-5,0,0); |
| dst_adjustment_offsets adj_offsets(time_duration(1,0,0), |
| time_duration(2,0,0), |
| time_duration(2,0,0)); |
| // rules for this zone are: |
| // start on first Sunday of April at 2 am |
| // end on last Sunday of October at 2 am |
| // so we use a first_last_dst_rule |
| first_day_of_the_week_in_month start_rule(Sunday, Apr); |
| last_day_of_the_week_in_month end_rule(Sunday, Oct); |
| shared_ptr<dst_calc_rule> nyc_rules(new first_last_dst_rule(start_rule, |
| end_rule)); |
| // create more dependent objects for a non-dst custom_time_zone |
| time_zone_names tzn2("Mountain Standard Time", "MST", |
| "", ""); // no dst means empty dst strings |
| time_duration utc_offset2(-7,0,0); |
| dst_adjustment_offsets adj_offsets2(time_duration(0,0,0), |
| time_duration(0,0,0), |
| time_duration(0,0,0)); |
| // no dst means we need a null pointer to the rules |
| shared_ptr<dst_calc_rule> phx_rules; |
| |
| // create the custom_time_zones |
| time_zone_ptr nyc_1(new custom_time_zone(tzn, utc_offset, |
| adj_offsets, nyc_rules)); |
| time_zone_ptr phx_1(new custom_time_zone(tzn2, utc_offset2, |
| adj_offsets2, phx_rules)); |
| |
| /***** posix_time_zone *****/ |
| |
| // create posix_time_zones that are the duplicates of the |
| // custom_time_zones created above. See posix_time_zone documentation |
| // for details on full zone names. |
| std::string nyc_string, phx_string; |
| nyc_string = "EST-05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00"; |
| // nyc_string = "EST-05EDT,M4.1.0,M10.5.0"; // shorter when defaults used |
| phx_string = "MST-07"; // no-dst |
| time_zone_ptr nyc_2(new posix_time_zone(nyc_string)); |
| time_zone_ptr phx_2(new posix_time_zone(phx_string)); |
| |
| |
| /***** show the sets are equal *****/ |
| |
| std::cout << "The first zone is in daylight savings from:\n " |
| << nyc_1->dst_local_start_time(2004) << " through " |
| << nyc_1->dst_local_end_time(2004) << std::endl; |
| |
| std::cout << "The second zone is in daylight savings from:\n " |
| << nyc_2->dst_local_start_time(2004) << " through " |
| << nyc_2->dst_local_end_time(2004) << std::endl; |
| |
| std::cout << "The third zone (no daylight savings):\n " |
| << phx_1->std_zone_abbrev() << " and " |
| << phx_1->base_utc_offset() << std::endl; |
| |
| std::cout << "The fourth zone (no daylight savings):\n " |
| << phx_2->std_zone_abbrev() << " and " |
| << phx_2->base_utc_offset() << std::endl; |
| |
| return 0; |
| } |
| ]]> |
| </programlisting> |
| </section> |