Namespaces
Variants
Views
Actions

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

From cppreference.com
< cpp‎ | chrono‎ | c
m ({{closed range}}, fmt)
m (Notes)
 
(One intermediate revision by one user not shown)
Line 15: Line 15:
  
 
===Notes===
 
===Notes===
The type of {{tt|tv_nsec}} is {{c|long long}} on some platforms, which is currently non-conforming in C++, but is conforming since C23.
+
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===
Line 34: Line 34:
  
 
     std::cout << "Current time: " << buff << " (UTC)\n"
 
     std::cout << "Current time: " << buff << " (UTC)\n"
               << "Raw timespec.time_t: " << ts.tv_sec << '\n'
+
               << "Raw timespec.tv_sec: " << ts.tv_sec << '\n'
 
               << "Raw timespec.tv_nsec: " << ts.tv_nsec << '\n';
 
               << "Raw timespec.tv_nsec: " << ts.tv_nsec << '\n';
 
}
 
}
Line 40: Line 40:
 
|output=
 
|output=
 
Current time: 04/06/23 12:03:31 (UTC)
 
Current time: 04/06/23 12:03:31 (UTC)
Raw timespec.time_t: 1680782611
+
Raw timespec.tv_sec: 1680782611
 
Raw timespec.tv_nsec: 678437213
 
Raw timespec.tv_nsec: 678437213
 
}}
 
}}

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