68
68
69
69
</ head >
70
70
< 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"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
188
188
189
189
< p class ="text-right "> < small >
190
190
最終更新日時(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秒
193
193
</ span >
194
194
< br />
195
195
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
220
220
</ p >
221
221
< h2 > 概要</ h2 >
222
222
< 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 >
223
225
< p > このクラスの< code > < a href ="gps_clock/now.html "> now()</ a > </ code > 静的メンバ関数は、標準では< code > noexcept(false)</ code > である。実装が< code > noexcept(true)</ code > である保証をしない限り、このクラスはTrivialClock要件を満たさない。</ p >
224
226
< h3 > エポック</ h3 >
225
227
< 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 >
227
229
< 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 >
230
233
< h2 > メンバ関数</ h2 >
231
234
< h3 > 静的メンバ関数</ h3 >
232
235
< table border ="1 " bordercolor ="#888 " style ="border-collapse:collapse ">
@@ -305,21 +308,41 @@ <h2>メンバ定数</h2>
305
308
</ tbody >
306
309
</ table >
307
310
< h2 > 例</ h2 >
311
+ < h3 > 例1: 現在GPS時間</ h3 >
308
312
< 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 >
309
313
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../chrono.html "> <chrono></ a > </ span > < span class ="cp "> </ span >
310
314
311
315
< 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 >
312
316
313
317
< span class ="kt "> int</ span > < span class ="nf "> main</ span > < span class ="p "> ()</ span >
314
318
< 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 >
316
320
< 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 >
317
321
< span class ="p "> }</ span >
318
322
</ code > </ pre > </ div >
319
323
</ div > </ p >
320
- < h3 > 出力例</ h3 >
324
+ < h4 > 出力例</ h4 >
321
325
< p > < pre > < code > 2019-10-24 11:15:37.493236171
322
326
</ 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 >
323
346
< h2 > バージョン</ h2 >
324
347
< h3 > 言語</ h3 >
325
348
< ul >
@@ -328,7 +351,7 @@ <h3>言語</h3>
328
351
< h3 > 処理系</ h3 >
329
352
< ul >
330
353
< 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 >
332
355
< li > < a href ="../../implementation.html#visual_cpp "> Visual C++</ a > : 2019 Update 3 < span aria-label ="未実装 " role ="img " title ="未実装 "> ❌</ span > </ li >
333
356
</ ul >
334
357
< h2 > 参照</ h2 >
0 commit comments