Time in Cilk
#include <cilk/cilk.h>
#include <iostream>
#include <chrono>
#include <ctime>
int main() {
auto p = [](const auto& x) { std::cout << x << std::endl; };
// We'll start by getting the current time.
auto now = std::chrono::system_clock::now();
p(std::chrono::system_clock::to_time_t(now));
// You can build a time point by providing the
// year, month, day, etc. Times are always associated
// with a time zone, but C++ doesn't have built-in
// time zone support, so we'll use UTC.
std::tm tm{};
tm.tm_year = 2009 - 1900;
tm.tm_mon = 11 - 1;
tm.tm_mday = 17;
tm.tm_hour = 20;
tm.tm_min = 34;
tm.tm_sec = 58;
auto then = std::chrono::system_clock::from_time_t(std::mktime(&tm));
p(std::chrono::system_clock::to_time_t(then));
// You can extract the various components of the time
// value as expected.
std::time_t t = std::chrono::system_clock::to_time_t(then);
std::tm* timeinfo = std::localtime(&t);
p(timeinfo->tm_year + 1900);
p(timeinfo->tm_mon + 1);
p(timeinfo->tm_mday);
p(timeinfo->tm_hour);
p(timeinfo->tm_min);
p(timeinfo->tm_sec);
// Note: Cilk doesn't have built-in nanosecond precision
// The day of the week is also available.
p(timeinfo->tm_wday);
// These methods compare two times, testing if the
// first occurs before, after, or at the same time
// as the second, respectively.
p(then < now);
p(then > now);
p(then == now);
// The duration represents the interval between two times.
auto diff = now - then;
p(std::chrono::duration_cast<std::chrono::seconds>(diff).count());
// We can compute the length of the duration in
// various units.
p(std::chrono::duration_cast<std::chrono::hours>(diff).count());
p(std::chrono::duration_cast<std::chrono::minutes>(diff).count());
p(std::chrono::duration_cast<std::chrono::seconds>(diff).count());
// Note: Cilk doesn't have built-in nanosecond precision
// You can use addition to advance a time by a given
// duration, or with a - to move backwards by a duration.
p(std::chrono::system_clock::to_time_t(then + diff));
p(std::chrono::system_clock::to_time_t(then - diff));
return 0;
}
This Cilk code demonstrates time and duration operations similar to the Go example. Here are some key points:
Cilk uses the C++ standard library’s
<chrono>
for time-related operations.Instead of Go’s
time.Now()
, we usestd::chrono::system_clock::now()
.Creating a specific time point is done by manipulating a
std::tm
structure and converting it to atime_point
.Extracting components of a time is done using the
std::tm
structure.Cilk (C++) doesn’t have built-in nanosecond precision or time zone support like Go does.
Duration calculations are done using
std::chrono::duration_cast
.Time point comparisons and arithmetic are similar to Go, using standard C++ operators.
To compile and run this Cilk program:
$ cilk++ time_example.cpp -o time_example
$ ./time_example
The output will be similar to the Go example, showing various time and duration operations.