Anda salah paham. settimeofday(2) mengatur waktu Epoch. yang merupakan tanggal dan waktu. Waktu baca(7)
Jadi jika Anda memulai dari string yang menyatakan tanggal, ubah string itu dengan strptime(3) menjadi struct tm
lalu ubah itu menjadi waktu Unix dengan mktime(3) lalu masukkan ke settimeofday
(yaitu tv_sec
lapangan).
Namun, settimeofday
memerlukan hak istimewa root dan saya percaya Anda biasanya harus menghindari memanggilnya (setidaknya pada komputer biasa yang terhubung ke Internet). Lebih baik atur beberapa layanan klien NTP di PC Linux Anda (mis. Jalankan ntpd atau chrony dan lebih umum baca bab sysadmin tentang menjaga waktu...). Lihat juga adjtimex(2)
BTW, tiba-tiba mengubah waktu sistem pada sistem multi-tasking -seperti Linux atau Windows- adalah operasi yang sangat berbahaya (karena akan mengganggu dan mengganggu banyak tugas sistem tergantung atau menggunakan waktu). Ada beberapa alasan bagus untuk melakukan itu (itu adalah ide yang sangat buruk secara umum). Jika Anda melakukannya, lakukan dengan sangat sedikit program &layanan yang berjalan (mis. Linux mode pengguna tunggal). Anda tidak boleh melakukannya dalam kode aplikasi biasa.
Saya menulis potongan kode ini untuk menyetel Tanggal dan Waktu di Linux.
#include <time.h>
struct tm time = { 0 };
time.tm_year = Year - 1900;
time.tm_mon = Month - 1;
time.tm_mday = Day;
time.tm_hour = Hour;
time.tm_min = Minute;
time.tm_sec = Second;
if (time.tm_year < 0)
{
time.tm_year = 0;
}
time_t t = mktime(&time);
if (t != (time_t) -1)
{
stime(&t);
}
Perhatikan bahwa stime
membutuhkan root
hak istimewa.