diff --git a/Examples-and-Recipes.md b/Examples-and-Recipes.md index 737050c..91b3cfd 100644 --- a/Examples-and-Recipes.md +++ b/Examples-and-Recipes.md @@ -7,6 +7,7 @@ This page contains examples and recipes contributed by community members. Feel f - [Converting from {year, microseconds} to CCSDS](#ccsds) - [Difference in months between two dates](#deltamonths) - [Parsing ISO strings](http://stackoverflow.com/a/33438989/576911) +- [2Gs Birthday](#birthday2gs) *** @@ -244,6 +245,38 @@ This outputs: These are all reasonable answers to the question, and all easily computable with this library. + +### 2Gs Birthday +(by [Howard Hinnant](https://github.com/HowardHinnant)) + +This example demonstrates both some simple date arithmetic, and how to handle discontinuities in a timezone. Dave was born in the "America/Los_Angeles" timezone at 10:03am on April 24, 1954. When will he be 2,000,000,000 seconds old (in the same timezone? + + #include + #include + #include "date.h" + #include "tz.h" + + int + main() + { + using namespace std::chrono_literals; + using namespace date; + // Dave was born April 24, 1954. 10:03 AM pst + // Want to know when he is 2 Gigaseconds old + auto birth = day_point{apr/24/1954} + 10h + 3min; + auto z = locate_zone("America/Los_Angeles"); + auto t = z->to_sys(birth); + t += 2'000'000'000s; + auto p = z->to_local(t); + std::cout << p.first << ' ' << p.second << '\n'; + } + +One first creates the local time, and then converts that to UTC using the `Zone` for "America/Los_Angeles". Then add 2Gs, then convert the time from UTC back to "America/Los_Angeles". The result is a pair, with the first part holding a `time_point` and the second part holding the abbreviation for the local time. This outputs: + +2017-09-08 14:36:20 PDT + +Note that without handling the timezone correctly, this result would be an hour off (2017-09-08 13:36:20) because the birth date falls in PST, and the celebration date falls in PDT. + *** ![CC BY Logo](http://mirrors.creativecommons.org/presskit/buttons/80x15/svg/by.svg) _This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/)._ \ No newline at end of file