Di Jawa, kita bisa menggunakan System.currentTimeMillis()
untuk mendapatkan cap waktu saat ini dalam Milidetik sejak zaman yang -
perbedaannya, diukur dalam milidetik, antara waktu saat ini dan tengah malam, 1 Januari 1970 UTC.
Di C ++ cara mendapatkan hal yang sama?
Saat ini saya menggunakan ini untuk mendapatkan cap waktu saat ini -
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds
cout << ms << endl;
Ini terlihat benar atau tidak?
steady_clock
akan selalu maju, itu adalah ukuran sebenarnya dari waktu sejak zamannya sementarasystem_clock
mungkin merupakan representasi dari waktu logis sejak zaman itu. Untuk setiap detik kabisat keduanya dapat tumbuh lebih jauh tergantung pada implementasi sistem.system_clock
harus sama dengan zaman UNIX, tetapi spesifikasi hanya mengatakan itu harus jam dinding waktu nyata seluruh sistem. Tidak ada persyaratan untuksteady_clock
mencocokkan kenyataan, hanya saja ia hanya bergerak maju.timeval
struct itu menjengkelkan).menggunakan
<sys/time.h>
lihat ini .
sumber
Jawaban ini sangat mirip dengan Oz. , Gunakan
<chrono>
untuk C ++ - Saya tidak mengambilnya dari Oz. meskipun...Saya mengambil cuplikan asli di bagian bawah halaman ini , dan sedikit memodifikasinya menjadi aplikasi konsol yang lengkap. Saya suka menggunakan lil 'ol' ini. Sangat luar biasa jika Anda melakukan banyak scripting dan membutuhkan alat yang andal di Windows untuk mendapatkan zaman dalam milidetik yang sebenarnya tanpa menggunakan VB, atau kode yang kurang modern, kurang ramah pembaca.
sumber
-560549313
ini tidak benar, bukan?int
!int nowms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
. Saya menggoyangkannyaint64_t
dan berhasil! Terima kasih banyak telah meminta info lebih lanjut untuk membantu!unsigned long long
lebih portabel, dan__int64
hanya tersedia di MSVC.__int64
jenis standar C ++. Orang bisa menggunakanstd::int64_t
sebagai gantinya.Karena C ++ 11 Anda dapat menggunakan
std::chrono
:std::chrono::system_clock::now()
.time_since_epoch()
duration_cast<milliseconds>(d)
std::chrono::milliseconds
ke integer (uint64_t
untuk menghindari overflow)sumber
unsigned long long
bukanuint64_t
.Jika menggunakan gettimeofday Anda harus melakukan long long jika tidak, Anda akan mendapatkan overflow dan karenanya bukan jumlah milidetik semenjak zaman: long int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000; akan memberi Anda nomor seperti 767990892 yang merupakan putaran 8 hari setelah zaman ;-).
sumber
Sertakan
<ctime>
dan gunakantime
fungsinya.sumber