• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Demonstrate conversions between a local time and utc
2  * Output:
3  *
4  * UTC <--> New York while DST is NOT active (5 hours)
5  * 2001-Dec-31 19:00:00 in New York is 2002-Jan-01 00:00:00 UTC time
6  * 2002-Jan-01 00:00:00 UTC is 2001-Dec-31 19:00:00 New York time
7  *
8  * UTC <--> New York while DST is active (4 hours)
9  * 2002-May-31 20:00:00 in New York is 2002-Jun-01 00:00:00 UTC time
10  * 2002-Jun-01 00:00:00 UTC is 2002-May-31 20:00:00 New York time
11  *
12  * UTC <--> Arizona (7 hours)
13  * 2002-May-31 17:00:00 in Arizona is 2002-Jun-01 00:00:00 UTC time
14  */
15 
16 #include "boost/date_time/posix_time/posix_time.hpp"
17 #include "boost/date_time/local_time_adjustor.hpp"
18 #include "boost/date_time/c_local_time_adjustor.hpp"
19 #include <iostream>
20 
21 int
main()22 main()
23 {
24   using namespace boost::posix_time;
25   using namespace boost::gregorian;
26 
27   //This local adjustor depends on the machine TZ settings-- highly dangerous!
28   typedef boost::date_time::c_local_adjustor<ptime> local_adj;
29   ptime t10(date(2002,Jan,1), hours(7));
30   ptime t11 = local_adj::utc_to_local(t10);
31   std::cout << "UTC <--> Zone base on TZ setting" << std::endl;
32   std::cout << to_simple_string(t11) << " in your TZ is "
33             << to_simple_string(t10) << " UTC time "
34             << std::endl;
35   time_duration td = t11 - t10;
36   std::cout << "A difference of: "
37             << to_simple_string(td) << std::endl;
38 
39 
40   //eastern timezone is utc-5
41   typedef boost::date_time::local_adjustor<ptime, -5, us_dst> us_eastern;
42 
43   ptime t1(date(2001,Dec,31), hours(19)); //5 hours b/f midnight NY time
44 
45   std::cout << "\nUTC <--> New York while DST is NOT active (5 hours)"
46             << std::endl;
47   ptime t2 =  us_eastern::local_to_utc(t1);
48   std::cout << to_simple_string(t1) << " in New York is "
49             << to_simple_string(t2) << " UTC time "
50             << std::endl;
51 
52   ptime t3 = us_eastern::utc_to_local(t2);//back should be the same
53   std::cout << to_simple_string(t2) << " UTC is "
54             << to_simple_string(t3) << " New York time "
55             << "\n\n";
56 
57   ptime t4(date(2002,May,31), hours(20)); //4 hours b/f midnight NY time
58   std::cout << "UTC <--> New York while DST is active (4 hours)" << std::endl;
59   ptime t5 = us_eastern::local_to_utc(t4);
60   std::cout << to_simple_string(t4) << " in New York is "
61             << to_simple_string(t5) << " UTC time "
62             << std::endl;
63 
64   ptime t6 = us_eastern::utc_to_local(t5);//back should be the same
65   std::cout << to_simple_string(t5) << " UTC is "
66             << to_simple_string(t6) << " New York time "
67             << "\n" << std::endl;
68 
69 
70   //Arizona timezone is utc-7 with no dst
71   typedef boost::date_time::local_adjustor<ptime, -7, no_dst> us_arizona;
72 
73   ptime t7(date(2002,May,31), hours(17));
74   std::cout << "UTC <--> Arizona (7 hours)" << std::endl;
75   ptime t8 = us_arizona::local_to_utc(t7);
76   std::cout << to_simple_string(t7) << " in Arizona is "
77             << to_simple_string(t8) << " UTC time "
78             << std::endl;
79 
80   return 0;
81 }
82 
83 
84 /*  Copyright 2001-2004: CrystalClear Software, Inc
85  *  http://www.crystalclearsoftware.com
86  *
87  *  Subject to the Boost Software License, Version 1.0.
88  * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
89  */
90 
91