6868
6969 </ head >
7070 < body >
71- < header data-kunai-mdinfo ="{"meta": {"header": ["chrono"], "namespace": ["std::chrono"], "id-type": ["class"], "cpp": ["cpp20"]}, "sources": [{"id": "ebc16ae7964ea9cd90c6aa05366f4cd940da7484", "source": "#include <iostream>\n#include <chrono>\n\nnamespace chrono = std::chrono;\n\nint main()\n{\n chrono::gps_clock::time_point tp = chrono::gps_clock::now();\n std::cout << tp << std::endl;\n}\n"}], "page_id": ["reference", "chrono", "gps_clock"]} ">
71+ < header data-kunai-mdinfo ="{"meta": {"header": ["chrono"], "namespace": ["std::chrono"], "id-type": ["class"], "cpp": ["cpp20"]}, "sources": [{"id": "ebc16ae7964ea9cd90c6aa05366f4cd940da7484", "source": "#include <iostream>\n#include <chrono>\n\nnamespace chrono = std::chrono;\n\nint main()\n{\n chrono::gps_clock::time_point tp = chrono::gps_clock::now();\n std::cout << tp << std::endl;\n}\n"}, {"id": "fb70cc3e2d39898de1933df0f40790348f7f8cf0", "source": "#include <iostream>\n#include <chrono>\n\nnamespace chrono = std::chrono;\nusing namespace std::literals::chrono_literals;\n\nint main() {\n auto utc_tp = chrono::utc_clock::from_sys(chrono::sys_days{2024y/1/1});\n auto gps_tp = chrono::gps_clock::from_utc(utc_tp);\n std::cout << utc_tp << \" UTC\" << std::endl;\n std::cout << gps_tp << \" GPS\" << std::endl;\n}\n"}], "page_id": ["reference", "chrono", "gps_clock"]} ">
7272 < nav class ="navbar navbar-default " role ="navigation ">
7373 < div class ="container-fluid ">
7474 < div class ="navbar-header ">
188188
189189 < p class ="text-right "> < small >
190190 最終更新日時(UTC):
191- < span itemprop ="datePublished " content ="2024-11-08T15:10:22 ">
192- 2024年11月08日 15時10分22秒
191+ < span itemprop ="datePublished " content ="2024-12-16T08:44:52 ">
192+ 2024年12月16日 08時44分52秒
193193 </ span >
194194 < br />
195195 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
220220</ p >
221221< h2 > 概要</ h2 >
222222< p > < code > gps_clock</ code > は、GPS時間 (GPST) を表現するためのクロックである。この時刻系は、カーナビや携帯端末などで使用される。</ p >
223+ < p > GPS時間ではうるう秒 (leap second) 補正が行われないため、2017年1月1日以降~2024年現在ではUTC (世界協定時) よりも18秒進んだ時間をとる。
224+ つまり 2024-01-01 00:00:18 GPS と 2024-01-01 00:00:00 UTC は等価である。</ p >
223225< p > このクラスの< code > < a href ="gps_clock/now.html "> now()</ a > </ code > 静的メンバ関数は、標準では< code > noexcept(false)</ code > である。実装が< code > noexcept(true)</ code > である保証をしない限り、このクラスはTrivialClock要件を満たさない。</ p >
224226< h3 > エポック</ h3 >
225227< p > クロックごとの初期時間 (内部的にカウンタがあれば値ゼロ) をエポックと呼ぶ。</ p >
226- < p > < code > gps_clock</ code > のエポックは、1980年1月6日 (この年の最初の日曜日 ) 0時0分0秒である。</ p >
228+ < p > < code > gps_clock</ code > のエポックは、1980年1月6日 (同年の最初の日曜日 ) 0時0分0秒である。</ p >
227229< h3 > うるう秒の扱い</ h3 >
228- < p > このクロックではうるう秒は挿入されず、うるう秒の数だけ時間が進む。そのため、UTCにうるう秒が挿入されるたびに、UTCはGPSよりも1秒ずつずれていく。</ p >
229- < p > GPS時間とTAI時間は19秒ずれていて、このずれは時間が経過しても変わらない。GPS時間のエポックが< code > < a href ="year/op_y.html "> 1958y</ a > /< a href ="month_constants.html "> January</ a > /1</ code > 、TAI時間のエポックが< code > < a href ="year/op_y.html "> 1980y</ a > /< a href ="month_constants.html "> January</ a > /< a href ="weekday_constants.html "> Sunday</ a > [1]</ code > であるが、1958年から1970年までのオフセットが10秒と、1970年から1980年までに挿入されたうるう秒が9秒あるためだ。</ p >
230+ < p > < code > gps_clock</ code > ではうるう秒は考慮されず、UTCに対してうるう秒分だけ時間がシフトする。そのため、UTCに正のうるう秒が挿入されるたびに、UTC時間はGPS時間よりも1秒ずつ遅れていく。</ p >
231+ < p > 同じくうるう秒を考慮しない< a href ="tai_clock.html "> TAI時間</ a > に対してGPS時間は19秒遅れており、このずれは時間が経過しても変わらない。これはTAI時間のエポックが< code > < a href ="year/op_y.html "> 1958y</ a > /< a href ="month_constants.html "> January</ a > /1</ code > 、GPS時間のエポックが< code > < a href ="year/op_y.html "> 1980y</ a > /< a href ="month_constants.html "> January</ a > /< a href ="weekday_constants.html "> Sunday</ a > [1]</ code > であるが、1958年から1970年までのオフセットが10秒と、1970年から1980年までに挿入されたうるう秒が9秒あるためだ。
232+ (1970年はTAI時間が定められた年である。)</ p >
230233< h2 > メンバ関数</ h2 >
231234< h3 > 静的メンバ関数</ h3 >
232235< table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
@@ -305,21 +308,41 @@ <h2>メンバ定数</h2>
305308</ tbody >
306309</ table >
307310< h2 > 例</ h2 >
311+ < h3 > 例1: 現在GPS時間</ h3 >
308312< p > < div class ="yata " id ="ebc16ae7964ea9cd90c6aa05366f4cd940da7484 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
309313< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../chrono.html "> <chrono></ a > </ span > < span class ="cp "> </ span >
310314
311315< span class ="k "> namespace</ span > < span class ="n "> chrono</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> chrono</ span > < span class ="p "> ;</ span >
312316
313317< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
314318< span class ="p "> {</ span >
315- < span class ="n "> chrono </ span > < span class =" o " > :: </ span > < span class =" n " > gps_clock < /span > < span class ="o "> ::</ span > < span class ="n "> time_point</ span > < span class ="n "> tp</ span > < span class ="o "> =</ span > < span class ="n "> chrono </ span > < span class =" o " > :: </ span > < span class =" n " > gps_clock </ span > < span class ="o "> ::</ span > < span class ="n "> < a href ="gps_clock/now.html "> now()</ a > </ span > < span class ="p "> ;</ span >
319+ < span class ="n "> < span style =" color:#ff0000 " > chrono::gps_clock </ span > </ span > < span class ="o "> ::</ span > < span class ="n "> time_point</ span > < span class ="n "> tp</ span > < span class ="o "> =</ span > < span class ="n "> < span style =" color:#ff0000 " > chrono::gps_clock </ span > </ span > < span class ="o "> ::</ span > < span class ="n "> < a href ="gps_clock/now.html "> now()</ a > </ span > < span class ="p "> ;</ span >
316320 < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> tp</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
317321< span class ="p "> }</ span >
318322</ code > </ pre > </ div >
319323</ div > </ p >
320- < h3 > 出力例</ h3 >
324+ < h4 > 出力例</ h4 >
321325< p > < pre > < code > 2019-10-24 11:15:37.493236171
322326</ code > </ pre > </ p >
327+ < h3 > 例2: うるう秒の影響</ h3 >
328+ < p > < div class ="yata " id ="fb70cc3e2d39898de1933df0f40790348f7f8cf0 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
329+ < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../chrono.html "> <chrono></ a > </ span > < span class ="cp "> </ span >
330+
331+ < span class ="k "> namespace</ span > < span class ="n "> chrono</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> chrono</ span > < span class ="p "> ;</ span >
332+ < span class ="k "> using</ span > < span class ="k "> namespace</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> literals</ span > < span class ="o "> ::</ span > < span class ="n "> chrono_literals</ span > < span class ="p "> ;</ span >
333+
334+ < span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span > < span class ="p "> {</ span >
335+ < span class ="k "> auto</ span > < span class ="n "> utc_tp</ span > < span class ="o "> =</ span > < span class ="n "> chrono</ span > < span class ="o "> ::</ span > < span class ="n "> utc_clock</ span > < span class ="o "> ::</ span > < span class ="n "> < a href ="utc_clock/from_sys.html "> from_sys</ a > </ span > < span class ="p "> (</ span > < span class ="n "> chrono</ span > < span class ="o "> ::</ span > < span class ="n "> sys_days</ span > < span class ="p "> {</ span > < span class ="mi "> 2024</ span > < span class ="n "> y</ span > < span class ="o "> /</ span > < span class ="mi "> 1</ span > < span class ="o "> /</ span > < span class ="mi "> 1</ span > < span class ="p "> });</ span >
336+ < span class ="k "> auto</ span > < span class ="n "> gps_tp</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> chrono::gps_clock</ span > </ span > < span class ="o "> ::</ span > < span class ="n "> < a href ="gps_clock/from_utc.html "> from_utc</ a > </ span > < span class ="p "> (</ span > < span class ="n "> utc_tp</ span > < span class ="p "> );</ span >
337+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> utc_tp</ span > < span class ="o "> <<</ span > < span class ="s "> " UTC"</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
338+ < span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="n "> gps_tp</ span > < span class ="o "> <<</ span > < span class ="s "> " GPS"</ span > < span class ="o "> <<</ span > < span class ="n "> < a href ="../ostream/endl.html "> std::endl</ a > </ span > < span class ="p "> ;</ span >
339+ < span class ="p "> }</ span >
340+ </ code > </ pre > </ div >
341+ </ div > </ p >
342+ < h4 > 出力</ h4 >
343+ < p > < pre > < code > 2024-01-01 00:00:00 UTC
344+ 2024-01-01 00:00:18 GPS
345+ </ code > </ pre > </ p >
323346< h2 > バージョン</ h2 >
324347< h3 > 言語</ h3 >
325348< ul >
@@ -328,7 +351,7 @@ <h3>言語</h3>
328351< h3 > 処理系</ h3 >
329352< ul >
330353< li > < a href ="../../implementation.html#clang "> Clang</ a > : 9.0 < span aria-label ="未実装 " role ="img " title ="未実装 "> ❌</ span > </ li >
331- < li > < a href ="../../implementation.html#gcc "> GCC</ a > : 9.2 < span aria-label ="未実装 " role ="img " title ="未実装 "> ❌</ span > , 13.1 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > </ li >
354+ < li > < a href ="../../implementation.html#gcc "> GCC</ a > : 9.2 < span aria-label ="未実装 " role ="img " title ="未実装 "> ❌</ span > , 13.2 < span aria-label ="検証済 " role ="img " title ="検証済 "> ✅</ span > </ li >
332355< li > < a href ="../../implementation.html#visual_cpp "> Visual C++</ a > : 2019 Update 3 < span aria-label ="未実装 " role ="img " title ="未実装 "> ❌</ span > </ li >
333356</ ul >
334357< h2 > 参照</ h2 >
0 commit comments