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"> 4 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) 8--> 9 10<section id="date_time.examples.local_utc_conversion"> 11 <title>Local to UTC Conversion</title> 12 13 <para> 14 Demonstrate utc to local and local to utc calculations including dst. 15 </para> 16 <programlisting> 17 <![CDATA[ 18 19 /* Demonstrate conversions between a local time and utc 20 * Output: 21 * 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 25 * 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 29 * 30 * UTC <--> Arizona (7 hours) 31 * 2002-May-31 17:00:00 in Arizona is 2002-Jun-01 00:00:00 UTC time 32 */ 33 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" 37 #include <iostream> 38 39 int 40 main() 41 { 42 using namespace boost::posix_time; 43 using namespace boost::gregorian; 44 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 " 52 << std::endl; 53 time_duration td = t11 - t10; 54 std::cout << "A difference of: " 55 << to_simple_string(td) << std::endl; 56 57 58 //eastern timezone is utc-5 59 typedef boost::date_time::local_adjustor<ptime, -5, us_dst> us_eastern; 60 61 ptime t1(date(2001,Dec,31), hours(19)); //5 hours b/f midnight NY time 62 63 std::cout << "\nUTC <--> New York while DST is NOT active (5 hours)" 64 << std::endl; 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 " 68 << std::endl; 69 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 " 73 << "\n\n"; 74 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 " 80 << std::endl; 81 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 " 85 << "\n" << std::endl; 86 87 88 //Arizona timezone is utc-7 with no dst 89 typedef boost::date_time::local_adjustor<ptime, -7, no_dst> us_arizona; 90 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 " 96 << std::endl; 97 98 return 0; 99 } 100 101 ]]> 102 </programlisting> 103</section> 104