Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/chrono/c/timespec"

From cppreference.com
< cpp‎ | chrono‎ | c
(p0063r3 (C11))
 
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 small|std::time_t}} tv_sec | 2=whole seconds &ndash; &gt;= 0}}
+
{{dsc|nolink=true|{{lc|std::time_t}} {{tt|tv_sec}}|2=whole seconds &ndash; &gt;= 0}}
{{dsc | nolink=true | {{dsc small|long}} tv_nsec | nanoseconds &ndash; [0, 999999999]}}
+
{{dsc|nolink=true|{{c|long}} {{tt|tv_nsec}}|nanoseconds &ndash; {{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

 
 
Utilities library
General utilities
Relational operators (deprecated in C++20)
 
 
C-style date and time utilities
Functions
Time manipulation
Format conversions
Constants
Types
timespec
(C++17)
 
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 – [0999999999]

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

#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

returns the calendar time in seconds and nanoseconds based on a given time base
(function) [edit]
calendar time type
(class) [edit]
C documentation for timespec