std::chrono::zoned_time
來自 cppreference.com
定義於標頭檔案 <chrono> |
||
template< class Duration, |
(C++20 起) | |
using zoned_seconds = std::chrono::zoned_time<std::chrono::seconds>; |
(C++20 起) | |
類 zoned_time
表示時區和解析度為 Duration
的 std::chrono::time_point 的邏輯配對。
zoned_time
的一個不變式是它總是引用一個有效的時區,並表示該時區中一個存在且明確的時間點。與此不變式一致,zoned_time
沒有移動建構函式或移動賦值運算子;嘗試移動 zoned_time
將執行復制操作。
如果 Duration
不是 std::chrono::duration 的特化,則程式格式不正確。
模板引數 TimeZonePtr
允許使用者提供自己的時區指標型別,並透過 std::chrono::zoned_traits 進一步自定義 zoned_time
的行為。自定義時區型別不必支援 std::chrono::time_zone 支援的所有操作,只需支援 zoned_time
上實際呼叫的函式所使用的操作。
TimeZonePtr
必須是 可移動構造的 (MoveConstructible)。只可移動的 TimeZonePtr
允許使用,但難以使用,因為 zoned_time
將不可移動,並且無法訪問儲存的 TimeZonePtr
。
目錄 |
[編輯] 成員型別
成員型別 | 定義 |
duration
|
std::common_type_t<Duration, std::chrono::seconds> |
[編輯] 成員函式
構造 zoned_time (public 成員函式) | |
將值賦值給 zoned_time (public 成員函式) | |
獲取時區指標的副本 (public 成員函式) | |
以 local_time 形式獲取儲存的時間點(public 成員函式) | |
以 sys_time 形式獲取儲存的時間點(public 成員函式) | |
獲取儲存時間點處時區的資訊 (public 成員函式) |
[編輯] 非成員函式
(C++20) |
比較兩個 zoned_time 值(函式模板) |
(C++20) |
將 zoned_time 輸出到流中(函式模板) |
[編輯] 輔助類
zoned_time 的格式化支援(類模板特化) | |
對 std::chrono::zoned_time 的雜湊支援 (類模板特化) |
[編輯] 輔助特化
template< class Duration > constexpr bool enable_nonlocking_formatter_optimization |
(C++23 起) | |
此 std::enable_nonlocking_formatter_optimization 的特化實現了對 chrono::zoned_time
物件進行 std::print 和 std::println 列印的高效實現。
[編輯] 推導指南
[編輯] 示例
執行此程式碼
#include <algorithm> #include <chrono> #include <iomanip> #include <iostream> #include <stdexcept> #include <string_view> int main() { constexpr std::string_view locations[] = { "Africa/Casablanca", "America/Argentina/Buenos_Aires", "America/Barbados", "America/Indiana/Petersburg", "America/Tarasco_Bar", "Antarctica/Casey", "Antarctica/Vostok", "Asia/Magadan", "Asia/Manila", "Asia/Shanghai", "Asia/Tokyo", "Atlantic/Bermuda", "Australia/Darwin", "Europe/Isle_of_Man", "Europe/Laputa", "Indian/Christmas", "Indian/Cocos", "Pacific/Galapagos", }; constexpr auto width = std::ranges::max_element(locations, {}, [](const auto& s){ return s.length(); })->length(); for (const auto location : locations) try { // may throw if 'location' is not in the time zone database const std::chrono::zoned_time zt{location, std::chrono::system_clock::now()}; std::cout << std::setw(width) << location << " - Zoned Time: " << zt << '\n'; } catch (std::runtime_error& ex) { std::cout << "Error: " << ex.what() << '\n'; } }
可能的輸出
Africa/Casablanca - Zoned Time: 2023-06-29 20:58:34.697449319 +01 America/Argentina/Buenos_Aires - Zoned Time: 2023-06-29 16:58:34.709957354 -03 America/Barbados - Zoned Time: 2023-06-29 15:58:34.709977888 AST America/Indiana/Petersburg - Zoned Time: 2023-06-29 15:58:34.709998072 EDT Error: tzdb: cannot locate zone: America/Tarasco_Bar Antarctica/Casey - Zoned Time: 2023-06-30 06:58:34.710093685 +11 Antarctica/Vostok - Zoned Time: 2023-06-30 01:58:34.710107932 +06 Asia/Magadan - Zoned Time: 2023-06-30 06:58:34.710121831 +11 Asia/Manila - Zoned Time: 2023-06-30 03:58:34.710134751 PST Asia/Shanghai - Zoned Time: 2023-06-30 03:58:34.710153259 CST Asia/Tokyo - Zoned Time: 2023-06-30 04:58:34.710172815 JST Atlantic/Bermuda - Zoned Time: 2023-06-29 16:58:34.710191043 ADT Australia/Darwin - Zoned Time: 2023-06-30 05:28:34.710236720 ACST Europe/Isle_of_Man - Zoned Time: 2023-06-29 20:58:34.710256834 BST Error: tzdb: cannot locate zone: Europe/Laputa Indian/Christmas - Zoned Time: 2023-06-30 02:58:34.710360409 +07 Indian/Cocos - Zoned Time: 2023-06-30 02:28:34.710377520 +0630 Pacific/Galapagos - Zoned Time: 2023-06-29 13:58:34.710389952 -06
[編輯] 參閱
(C++20) |
表示一個時區 (類) |