1 <?xml version=
"1.0" encoding=
"utf-8"?>
2 <!DOCTYPE library PUBLIC
"-//Boost//DTD BoostBook XML V1.0//EN"
3 "../../../tools/boostbook/dtd/boostbook.dtd">
5 <!-- Copyright (c) 2001-2004 CrystalClear Software, Inc.
6 Subject to the Boost Software License, Version 1.0.
7 (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
10 <section id=
"date_time.examples.local_utc_conversion">
11 <title>Local to UTC Conversion
</title>
14 Demonstrate utc to local and local to utc calculations including dst.
19 /* Demonstrate conversions between a local time and utc
22 * UTC <--> New York while DST is NOT active (
5 hours)
23 *
2001-Dec-
31 19:
00:
00 in New York is
2002-Jan-
01 00:
00:
00 UTC time
24 *
2002-Jan-
01 00:
00:
00 UTC is
2001-Dec-
31 19:
00:
00 New York time
26 * UTC <--> New York while DST is active (
4 hours)
27 *
2002-May-
31 20:
00:
00 in New York is
2002-Jun-
01 00:
00:
00 UTC time
28 *
2002-Jun-
01 00:
00:
00 UTC is
2002-May-
31 20:
00:
00 New York time
30 * UTC <--> Arizona (
7 hours)
31 *
2002-May-
31 17:
00:
00 in Arizona is
2002-Jun-
01 00:
00:
00 UTC time
34 #include
"boost/date_time/posix_time/posix_time.hpp"
35 #include
"boost/date_time/local_time_adjustor.hpp"
36 #include
"boost/date_time/c_local_time_adjustor.hpp"
42 using namespace boost::posix_time;
43 using namespace boost::gregorian;
45 //This local adjustor depends on the machine TZ settings-- highly dangerous!
46 typedef boost::date_time::c_local_adjustor
<ptime> local_adj;
47 ptime t10(date(
2002,Jan,
1), hours(
7));
48 ptime t11 = local_adj::utc_to_local(t10);
49 std::cout <<
"UTC <--> Zone base on TZ setting" << std::endl;
50 std::cout << to_simple_string(t11) <<
" in your TZ is "
51 << to_simple_string(t10) <<
" UTC time "
53 time_duration td = t11 - t10;
54 std::cout <<
"A difference of: "
55 << to_simple_string(td) << std::endl;
58 //eastern timezone is utc-
5
59 typedef boost::date_time::local_adjustor
<ptime, -
5, us_dst
> us_eastern;
61 ptime t1(date(
2001,Dec,
31), hours(
19)); //
5 hours b/f midnight NY time
63 std::cout <<
"\nUTC <--> New York while DST is NOT active (5 hours)"
65 ptime t2 = us_eastern::local_to_utc(t1);
66 std::cout << to_simple_string(t1) <<
" in New York is "
67 << to_simple_string(t2) <<
" UTC time "
70 ptime t3 = us_eastern::utc_to_local(t2);//back should be the same
71 std::cout << to_simple_string(t2) <<
" UTC is "
72 << to_simple_string(t3) <<
" New York time "
75 ptime t4(date(
2002,May,
31), hours(
20)); //
4 hours b/f midnight NY time
76 std::cout <<
"UTC <--> New York while DST is active (4 hours)" << std::endl;
77 ptime t5 = us_eastern::local_to_utc(t4);
78 std::cout << to_simple_string(t4) <<
" in New York is "
79 << to_simple_string(t5) <<
" UTC time "
82 ptime t6 = us_eastern::utc_to_local(t5);//back should be the same
83 std::cout << to_simple_string(t5) <<
" UTC is "
84 << to_simple_string(t6) <<
" New York time "
88 //Arizona timezone is utc-
7 with no dst
89 typedef boost::date_time::local_adjustor
<ptime, -
7, no_dst
> us_arizona;
91 ptime t7(date(
2002,May,
31), hours(
17));
92 std::cout <<
"UTC <--> Arizona (7 hours)" << std::endl;
93 ptime t8 = us_arizona::local_to_utc(t7);
94 std::cout << to_simple_string(t7) <<
" in Arizona is "
95 << to_simple_string(t8) <<
" UTC time "