{"id":2767,"date":"2018-03-27T13:05:15","date_gmt":"2018-03-27T11:05:15","guid":{"rendered":"http:\/\/mariusbancila.ro\/blog\/?p=2767"},"modified":"2018-04-20T10:27:36","modified_gmt":"2018-04-20T08:27:36","slug":"cpp20-calendars-and-time-zones","status":"publish","type":"post","link":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/","title":{"rendered":"C++20 calendars and time zones"},"content":{"rendered":"<p>A couple years ago I wrote a post called <a href=\"http:\/\/mariusbancila.ro\/blog\/2016\/10\/31\/a-better-date-and-time-c-library\/\">A better date and time C++ library<\/a> about Howard Hinnant&#8217;s <a href=\"https:\/\/github.com\/HowardHinnant\/date\">date library<\/a> (I actually planned for several posts, but only the first was materialized). A slightly modified version of the library has been voted in for C++ 20 at the ISO committee meeting in Jacksonville this month. You can find the actual proposal here <a href=\"http:\/\/howardhinnant.github.io\/date\/d0355r7.html\">D0355R7: Extending &lt;chrono&gt; to Calendars and Time Zones<\/a>.<br \/>\n<!--more--><\/p>\n<p>This addition to the <tt>chrono<\/tt> library provides two things:<\/p>\n<ul>\n<li>calendar support: on one hand, types that represent the year, month and day, and various combinations, such as a specific day in a month (<tt>month_day<\/tt>) or the last day in a month (<tt>month_day_last<\/tt>), a specific month of the year (<tt>year_month<\/tt>) and others, and on the other hand operations with dates for the Gregorian calendar.<\/li>\n<li>time zones support: the ability the represent time points in a specific time zone (from the <a href=\"https:\/\/www.iana.org\/time-zones\">IANA time zones database<\/a>).<\/li>\n<\/ul>\n<p>The library is not implemented yet by any compiler but you can find it on <a href=\"https:\/\/github.com\/HowardHinnant\/date\">Github<\/a> and you can try it on <a href=\"https:\/\/wandbox.org\/permlink\/vqwMyTphHJv5iXX7\">Wandbox<\/a>. Mind that the namespace of this implementation is <tt>date<\/tt>, but it will actually be part of <tt>std::chrono<\/tt>.<\/p>\n<p>Here are just some random examples of using the new features:<\/p>\n<ul>\n<li>Representing dates:\n<pre class=\"lang:default decode:true \" >auto d1 = 2018_y \/ mar \/ 27;\r\nauto d2 = 27_d \/ mar \/ 2018;\r\nauto d3 = mar \/ 27 \/ 2018;\r\nyear_month_day today = floor&lt;days&gt;(system_clock::now());\r\n\r\nassert(d1 == d2);\r\nassert(d2 == d3);\r\nassert(d3 == today);<\/pre>\n<\/li>\n<li>Determining the last day of February the current year:\n<pre class=\"lang:default decode:true \" >auto today = year_month_day{ floor&lt;days&gt;(system_clock::now()) };\r\nauto ymdl = year_month_day_last(today.year(), month_day_last{ month{ 2 } });\r\nauto last_day_feb = year_month_day{ ymdl };\r\n\r\nassert(last_day_feb == 2018_y\/feb\/28); \/\/ for 2018<\/pre>\n<\/li>\n<li>Number of days between two dates:\n<pre class=\"lang:default decode:true \" >inline int number_of_days(sys_days const &amp; first,\r\n                          sys_days const &amp; last)\r\n{\r\n   return (last - first).count();\r\n}\r\n\r\nauto days = number_of_days(2018_y \/ apr \/ 1, 2018_y \/ dec \/ 25); \r\n\r\nassert(days == 268);<\/pre>\n<\/li>\n<li>Printing the current time in the current time zone:\n<pre class=\"lang:default decode:true \" >auto time = floor&lt;std::chrono::milliseconds&gt;(system_clock::now());\r\nstd::cout &lt;&lt; std::left &lt;&lt; std::setw(25) &lt;&lt; std::setfill(' ')\r\n          &lt;&lt; \"Time\"\r\n          &lt;&lt; time &lt;&lt; std::endl;\r\n\r\nauto localtime = zoned_time&lt;std::chrono::milliseconds&gt;(date::current_zone(), time);\r\nstd::cout &lt;&lt; std::left &lt;&lt; std::setw(25) &lt;&lt; std::setfill(' ')\r\n          &lt;&lt; \"Local\"\r\n          &lt;&lt; localtime &lt;&lt; std::endl;<\/pre>\n<p>The result is something like this (my local time zone is Europe\/Bucharest):<\/p>\n<pre class=\"lang:default decode:true \" >Time                     2018-03-27 10:52:17.081\r\nLocal                    2018-03-27 13:52:17.081 EEST<\/pre>\n<\/li>\n<li>Printing the current time in different time zones (<tt>localtime<\/tt> is the object from example above):\n<pre class=\"lang:default decode:true \" >auto zone_names = {\r\n   \"Asia\/Tokyo\",\r\n   \"Asia\/Hong_Kong\",\r\n   \"Europe\/Bucharest\",\r\n   \"Europe\/Berlin\",\r\n   \"Europe\/London\",\r\n   \"America\/New_York\",\r\n   \"Pacific\/Honolulu\",\r\n};\r\n\r\nfor(auto const&amp; name : zone_names)\r\n   std::cout &lt;&lt; std::left &lt;&lt; std::setw(25) &lt;&lt; std::setfill(' ')\r\n             &lt;&lt; name\r\n             &lt;&lt; zoned_time&lt;std::chrono::milliseconds&gt;(name, localtime) \r\n             &lt;&lt; std::endl;<\/pre>\n<p>The result looks like this:<\/p>\n<pre class=\"lang:default decode:true \" >Asia\/Tokyo               2018-03-27 19:52:17.081 JST\r\nAsia\/Hong_Kong           2018-03-27 18:52:17.081 HKT\r\nEurope\/Bucharest         2018-03-27 13:52:17.081 EEST\r\nEurope\/Berlin            2018-03-27 12:52:17.081 CEST\r\nEurope\/London            2018-03-27 11:52:17.081 BST\r\nAmerica\/New_York         2018-03-27 06:52:17.081 EDT\r\nPacific\/Honolulu         2018-03-27 00:52:17.081 HST<\/pre>\n<\/li>\n<\/ul>\n<p>The date and time utilities page at <a href=\"http:\/\/en.cppreference.com\/w\/cpp\/chrono\">http:\/\/en.cppreference.com\/w\/cpp\/chrono<\/a> is already updated with references to the added extensions, although most of the documentation is just empty for now. However, you can find all that you need in the project documentation on Github.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A couple years ago I wrote a post called <a href=\"http:\/\/mariusbancila.ro\/blog\/2016\/10\/31\/a-better-date-and-time-c-library\/\">A better date and time C++ library<\/a> about Howard Hinnant&#8217;s <a href=\"https:\/\/github.com\/HowardHinnant\/date\">date library<\/a> (I actually planned for several posts, but only the first was materialized). A slightly modified version of the library has been voted in for C++ 20 at the ISO committee meeting in Jacksonville this month. You can find the actual proposal here <a href=\"http:\/\/howardhinnant.github.io\/date\/d0355r7.html\">D0355R7: Extending &lt;chrono&gt; to Calendars and Time Zones<\/a>.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[7],"tags":[451,543,488,489,333],"class_list":["post-2767","post","type-post","status-publish","format-standard","hentry","category-c","tag-c","tag-c20","tag-chrono","tag-date","tag-stl"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"A quick look at C++20&#039;s calendar and time zone extensions to the chrono library.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Marius Bancila\"\/>\n\t<meta name=\"keywords\" content=\"c++,c++20,stl,chrono,date\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Marius Bancila&#039;s Blog | About code. Mostly on C++\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"C++ calendars and time zones\" \/>\n\t\t<meta property=\"og:description\" content=\"A quick look at C++20&#039;s calendar and time zone extensions to the chrono library.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2018-03-27T11:05:15+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2018-04-20T08:27:36+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"C++ calendars and time zones\" \/>\n\t\t<meta name=\"twitter:description\" content=\"A quick look at C++20&#039;s calendar and time zone extensions to the chrono library.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#article\",\"name\":\"C++ calendars and time zones\",\"headline\":\"C++20 calendars and time zones\",\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"},\"datePublished\":\"2018-03-27T13:05:15+02:00\",\"dateModified\":\"2018-04-20T10:27:36+02:00\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#webpage\"},\"articleSection\":\"C++, C++, c++20, chrono, date, STL\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"position\":2,\"name\":\"IT\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"position\":3,\"name\":\"Software\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"name\":\"C++\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/#listItem\",\"name\":\"IT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"position\":4,\"name\":\"C++\",\"item\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#listItem\",\"name\":\"C++20 calendars and time zones\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/#listItem\",\"name\":\"Software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#listItem\",\"position\":5,\"name\":\"C++20 calendars and time zones\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/category\\\/it\\\/software\\\/c\\\/#listItem\",\"name\":\"C++\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"Marius Bancila\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Marius Bancila\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#webpage\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/\",\"name\":\"C++ calendars and time zones\",\"description\":\"A quick look at C++20's calendar and time zone extensions to the chrono library.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/2018\\\/03\\\/27\\\/cpp20-calendars-and-time-zones\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2018-03-27T13:05:15+02:00\",\"dateModified\":\"2018-04-20T10:27:36+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/\",\"name\":\"Marius Bancila's Blog\",\"description\":\"About code. Mostly on C++\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mariusbancila.ro\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"C++ calendars and time zones","description":"A quick look at C++20's calendar and time zone extensions to the chrono library.","canonical_url":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/","robots":"max-image-preview:large","keywords":"c++,c++20,stl,chrono,date","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#article","name":"C++ calendars and time zones","headline":"C++20 calendars and time zones","author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"},"datePublished":"2018-03-27T13:05:15+02:00","dateModified":"2018-04-20T10:27:36+02:00","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#webpage"},"isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#webpage"},"articleSection":"C++, C++, c++20, chrono, date, STL"},{"@type":"BreadcrumbList","@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog#listItem","position":1,"name":"Home","item":"https:\/\/mariusbancila.ro\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","position":2,"name":"IT","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","position":3,"name":"Software","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","name":"C++"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/#listItem","name":"IT"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","position":4,"name":"C++","item":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#listItem","name":"C++20 calendars and time zones"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/#listItem","name":"Software"}},{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#listItem","position":5,"name":"C++20 calendars and time zones","previousItem":{"@type":"ListItem","@id":"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/#listItem","name":"C++"}}]},{"@type":"Organization","@id":"https:\/\/mariusbancila.ro\/blog\/#organization","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","url":"https:\/\/mariusbancila.ro\/blog\/"},{"@type":"Person","@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author","url":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/","name":"Marius Bancila","image":{"@type":"ImageObject","@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/a84dd2831d955c38355ddea55df4df260809b88f36408bc14fd4eab8f7f131c9?s=96&d=mm&r=g","width":96,"height":96,"caption":"Marius Bancila"}},{"@type":"WebPage","@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#webpage","url":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/","name":"C++ calendars and time zones","description":"A quick look at C++20's calendar and time zone extensions to the chrono library.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mariusbancila.ro\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/#breadcrumblist"},"author":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/#author"},"datePublished":"2018-03-27T13:05:15+02:00","dateModified":"2018-04-20T10:27:36+02:00"},{"@type":"WebSite","@id":"https:\/\/mariusbancila.ro\/blog\/#website","url":"https:\/\/mariusbancila.ro\/blog\/","name":"Marius Bancila's Blog","description":"About code. Mostly on C++","inLanguage":"en-US","publisher":{"@id":"https:\/\/mariusbancila.ro\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Marius Bancila's Blog | About code. Mostly on C++","og:type":"article","og:title":"C++ calendars and time zones","og:description":"A quick look at C++20's calendar and time zone extensions to the chrono library.","og:url":"https:\/\/mariusbancila.ro\/blog\/2018\/03\/27\/cpp20-calendars-and-time-zones\/","article:published_time":"2018-03-27T11:05:15+00:00","article:modified_time":"2018-04-20T08:27:36+00:00","twitter:card":"summary","twitter:title":"C++ calendars and time zones","twitter:description":"A quick look at C++20's calendar and time zone extensions to the chrono library."},"aioseo_meta_data":{"post_id":"2767","title":"C++ calendars and time zones","description":"A quick look at C++20's calendar and time zone extensions to the chrono library.","keywords":[{"label":"c++","value":"c++"},{"label":"c++20","value":"c++20"},{"label":"stl","value":"stl"},{"label":"chrono","value":"chrono"},{"label":"date","value":"date"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-03-18 21:04:51","updated":"2025-12-12 07:48:31","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"author_meta":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"featured_img":null,"jetpack_publicize_connections":[],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Marius Bancila","author_link":"https:\/\/mariusbancila.ro\/blog\/author\/admin\/"},"uagb_comment_info":1,"uagb_excerpt":"A couple years ago I wrote a post called A better date and time C++ library about Howard Hinnant's date library (I actually planned for several posts, but only the first was materialized). A slightly modified version of the library has been voted in for C++ 20 at the ISO committee meeting in Jacksonville this&hellip;","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">C++<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C++<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">C++<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">c++20<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">chrono<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">date<\/a>","<a href=\"https:\/\/mariusbancila.ro\/blog\/category\/it\/software\/c\/\" class=\"advgb-post-tax-term\">STL<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">C++<\/span>","<span class=\"advgb-post-tax-term\">c++20<\/span>","<span class=\"advgb-post-tax-term\">chrono<\/span>","<span class=\"advgb-post-tax-term\">date<\/span>","<span class=\"advgb-post-tax-term\">STL<\/span>"]}},"comment_count":"1","relative_dates":{"created":"Posted 9 years ago","modified":"Updated 8 years ago"},"absolute_dates":{"created":"Posted on March 27, 2018","modified":"Updated on April 20, 2018"},"absolute_dates_time":{"created":"Posted on March 27, 2018 1:05 pm","modified":"Updated on April 20, 2018 10:27 am"},"featured_img_caption":"","series_order":"","jetpack_shortlink":"https:\/\/wp.me\/pYNdv-ID","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/2767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/comments?post=2767"}],"version-history":[{"count":6,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/2767\/revisions"}],"predecessor-version":[{"id":2906,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/posts\/2767\/revisions\/2906"}],"wp:attachment":[{"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/media?parent=2767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/categories?post=2767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mariusbancila.ro\/blog\/wp-json\/wp\/v2\/tags?post=2767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}