私は次のようにミリ秒単位の開始時点を持っています:
using namespace std::chrono;
typedef time_point<system_clock, milliseconds> MyTimePoint;
MyTimePoint startTimePoint = time_point_cast<MyTimePoint::duration>(system_clock::time_point(steady_clock::now()));
これで、startTimePointに加算または減算したい特定の時間数があります。
int numHours = -5//or 5 etc (Can be a plus or minus number)
この豊富な時間を元のstartTimePointに追加するにはどうすればよいですか?
startTimePoint
に5時間を追加したい場合、それは退屈なほど簡単です。
_startTimePoint += hours(5); // from the alias std::chrono::hours
_
実例 。
ちなみに、あなたはsteady_clock::now()
を_system_clock::time_point
_に変換しようとしています。これは コンパイルすらすべきではありません です。 steady_clock::now()
をsystem_clock::now()
に変更すると、準備が整います。
ここでは、ユーザーが望むものを何でも利用できる時間を分単位で使用しました。だから以下はクロノを使った簡単なプログラムです
#include <iostream>
#include <chrono>
using namespace std;
int main() {
using clock = std::chrono::system_clock;
clock::time_point nowp = clock::now();
cout<<"Enter the time that you want to add in minutes"<<endl;
int time_min;
cin>>time_min;
cin.ignore();
clock::time_point end = nowp + std::chrono::minutes(time_min);
time_t nowt = clock::to_time_t ( nowp );
time_t endt = clock::to_time_t ( end);
std::cout << " " << ctime(&nowt) << "\n";
std::cout << ctime(&endt) << std::endl;
return 0;
}
Time_pointをdurationに、またはdurationをtime_pointに中間なしで変換します。
Time_pointをdurationに変換したり、直接元に戻したりすることは本質的に不可能です。多くの例では、time_tを中間体として使用しています。これは優れた方法です。
Time_point'zero 'をヘルパーとして使用するメソッドを使用します。
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main(int argc, char *argv[])
{
using namespace std::chrono;
system_clock::time_point zero; // initialised to zero in constructor
system_clock::time_point tp_now; // now as time_point
duration<int, ratio<1>> dur_now; // now as duration
system_clock::time_point tp_future; // calculated future as time_point
// The objective is to sleep_until the system time is at the next 5 minutes
// boundary (e.g. time is 09:35)
tp_now = system_clock::now(); // What time is it now?
cout << "tp_now = " << tp_now.time_since_Epoch().count() << endl;
// It is not possible to assign a time_point directly to a duration.
// but the difference between two time_points can be cast to duration
dur_now = duration_cast<seconds>(tp_now-zero); // subtract nothing from time_point
cout << "dur_now = " << dur_now.count() << endl;
// Instead of using seconds granularity, I want to use 5 minutes
// so I define a suitable type: 5 minutes in seconds
typedef duration<int,ratio<5*60>> dur5min;
// When assigning the time_point (ok: duration) is truncated to the nearest 5min
dur5min min5 = duration_cast<dur5min>(tp_now-zero); // (Yes, I do it from time_point again)
cout << "min5 ('now' in 5min units) = " << min5.count() << endl;
// The next 5 min time point is
min5 += dur5min{1};
cout << "min5 += dur5min{1} = " << min5.count() << endl;
// It is not possible to assign a duration directly to a time_point.
// but I can add a duration to a time_point directly
tp_future = zero + min5;
cout << "tp_future = " << tp_future.time_since_Epoch().count() << endl;
// to be used in e.g. sleep_until
// std::this_thread::sleep_until(tp_future);
return 0;
}