Jac*_*kzz 8 c++ linux datetime
我正在开发一个跨平台应用程序,它将系统日期和时间更改为指定值.我已经完成了部分Windows.
如何从C++程序中设置系统日期和时间Linux?我正在寻找类似的功能SetSystemTime(SYSTEMTIME &x).
据我所知settimeofday(),对日期没有任何影响,我不确定函数的用法stime().我希望mktime()与我的需要无关.
有谁能够帮我.
你理解错了.settimeofday(2)设置大纪元时间.这是日期和时间.阅读时间(7)
因此,如果从表示日期的字符串开始,将该字符串与strptime(3)struct tm转换为a 然后将其转换为使用mktime(3)的Unix时间,然后将其转换为settimeofday(即tv_sec字段).
但是,settimeofday需要root权限,我相信你通常应该避免调用它.最好在你的Linux PC上设置一些NTP客户端服务(例如运行ntpd或chrony,更一般地阅读关于保持时间的系统管理员章节......).另见adjtimex(2)
顺便说一句,在多任务系统(如Linux或Windows)上突然改变系统时间是一项非常危险的操作(因为它会根据或使用时间来扰乱和干扰许多系统任务).这样做的理由很少(一般来说这是一个非常糟糕的主意).如果你这样做,那就用很少的程序和服务运行(例如单用户模式 Linux).你不应该在普通的应用程序代码中这样做.
我编写这段代码来设置Linux下的日期和时间。
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);
Run Code Online (Sandbox Code Playgroud)
请注意,这stime需要root特权。希望这可以帮助。
博申