#include <iostream>
#include <chrono>
#include <thread>
#include <iomanip>
int main() {
auto now = std::chrono::system_clock::now();
std::time_t tt = std::chrono::system_clock::to_time_t(now);
std::cout << "Current time: " << std::put_time(std::localtime(&tt), "%Y-%m-%d %H:%M:%S") << std::endl;
auto start = std::chrono::high_resolution_clock::now();
volatile long long sum = 0;
for (int i = 0; i < 1000000; ++i) {
sum += i;
}
auto end = std::chrono::high_resolution_clock::now();
auto duration_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);
auto duration_us = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
auto duration_ms = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::cout << "Loop calculation took: "
<< duration_ns.count() << " nanoseconds, "
<< duration_us.count() << " microseconds, "
<< duration_ms.count() << " milliseconds" << std::endl;
auto steady_start = std::chrono::steady_clock::now();
std::this_thread::sleep_for(std::chrono::milliseconds(200));
auto steady_end = std::chrono::steady_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(steady_end - steady_start);
std::cout << "Actually slept for " << elapsed.count() << " milliseconds" << std::endl;
std::chrono::seconds sec(5);
std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(sec);
std::cout << "5 seconds = " << ms.count() << " milliseconds" << std::endl;
auto future_time = now + std::chrono::hours(1);
std::time_t future_tt = std::chrono::system_clock::to_time_t(future_time);
std::cout << "One hour later: " << std::put_time(std::localtime(&future_tt), "%Y-%m-%d %H:%M:%S") << std::endl;
return 0;
}