Difference between revisions of "cpp/chrono/c/timespec"
From cppreference.com
(p0063r3 (C11)) |
D41D8CD98F (Talk | contribs) m (→Notes) |
||
(14 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|timespec}} | {{cpp/title|timespec}} | ||
{{cpp/chrono/c/navbar}} | {{cpp/chrono/c/navbar}} | ||
− | + | {{ddcl|header=ctime|since=c++17| | |
− | {{ddcl | header=ctime | since=c++17 | | + | |
struct timespec; | struct timespec; | ||
}} | }} | ||
Line 9: | Line 8: | ||
===Member objects=== | ===Member objects=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc | nolink=true | {{ | + | {{dsc|nolink=true|{{lc|std::time_t}} {{tt|tv_sec}}|2=whole seconds – >= 0}} |
− | {{dsc | nolink=true | {{ | + | {{dsc|nolink=true|{{c|long}} {{tt|tv_nsec}}|nanoseconds – {{closed range|0|999999999}}}} |
{{dsc end}} | {{dsc end}} | ||
+ | |||
+ | The declaration order of {{tt|tv_sec}} and {{tt|tv_nsec}} is unspecified. Implementation may add other data members to {{tt|timespec}}. | ||
+ | |||
+ | ===Notes=== | ||
+ | The type of {{tt|tv_nsec}} is {{c|long long}} on some platforms, which is currently non-conforming in C++, but is allowed in C since C23. | ||
+ | |||
+ | ===Example=== | ||
+ | {{example | ||
+ | |code= | ||
+ | #include <ctime> | ||
+ | #include <iostream> | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | std::timespec ts; | ||
+ | std::timespec_get(&ts, TIME_UTC); | ||
+ | char buff[0x80]; | ||
+ | std::strftime(buff, sizeof buff, "%D %T", std::gmtime(&ts.tv_sec)); | ||
+ | |||
+ | // auto [sec, nsec] = ts; // UB: structured bindings should not be used because the | ||
+ | // declaration order and data member list are unspecified | ||
+ | |||
+ | std::cout << "Current time: " << buff << " (UTC)\n" | ||
+ | << "Raw timespec.tv_sec: " << ts.tv_sec << '\n' | ||
+ | << "Raw timespec.tv_nsec: " << ts.tv_nsec << '\n'; | ||
+ | } | ||
+ | |p=true | ||
+ | |output= | ||
+ | Current time: 04/06/23 12:03:31 (UTC) | ||
+ | Raw timespec.tv_sec: 1680782611 | ||
+ | Raw timespec.tv_nsec: 678437213 | ||
+ | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/chrono/c/dsc timespec_get}} | + | {{dsc inc|cpp/chrono/c/dsc timespec_get}} |
− | {{dsc inc | cpp/chrono/c/dsc tm}} | + | {{dsc inc|cpp/chrono/c/dsc tm}} |
+ | {{dsc see c|c/chrono/timespec}} | ||
{{dsc end}} | {{dsc end}} | ||
+ | |||
+ | {{langlinks|es|ja|ru|zh}} |
Latest revision as of 06:49, 4 April 2024
Defined in header <ctime>
|
||
struct timespec; |
(since C++17) | |
Structure holding an interval broken down into seconds and nanoseconds.
Contents |
[edit] Member objects
std::time_t tv_sec
|
whole seconds – >= 0 |
long tv_nsec
|
nanoseconds – [ 0, 999999999]
|
The declaration order of tv_sec
and tv_nsec
is unspecified. Implementation may add other data members to timespec
.
[edit] Notes
The type of tv_nsec
is long long on some platforms, which is currently non-conforming in C++, but is allowed in C since C23.
[edit] Example
Run this code
#include <ctime> #include <iostream> int main() { std::timespec ts; std::timespec_get(&ts, TIME_UTC); char buff[0x80]; std::strftime(buff, sizeof buff, "%D %T", std::gmtime(&ts.tv_sec)); // auto [sec, nsec] = ts; // UB: structured bindings should not be used because the // declaration order and data member list are unspecified std::cout << "Current time: " << buff << " (UTC)\n" << "Raw timespec.tv_sec: " << ts.tv_sec << '\n' << "Raw timespec.tv_nsec: " << ts.tv_nsec << '\n'; }
Possible output:
Current time: 04/06/23 12:03:31 (UTC) Raw timespec.tv_sec: 1680782611 Raw timespec.tv_nsec: 678437213
[edit] See also
(C++17) |
returns the calendar time in seconds and nanoseconds based on a given time base (function) |
calendar time type (class) | |
C documentation for timespec
|