ex_local_utc_conversion.xml 3.7 KB

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