QT中怎么修改当前系统时间?
本人是在windows下做的 找到了settimeofday这个函数能修改时间,但是不知道怎么算,希望各位大虾给予帮助
--------------------编程问答--------------------
QT中用QDateTime的CurrentDateTime()获取系统当前时间;
--------------------编程问答--------------------
--------------------编程问答--------------------
Qt本身不提供时间设置的函数,使用windows 的native API函数SetSystemTime
链接的时候要连接上Kernel32.lib#include <time.h> #include <windows.h> bool hStart::sDate(int year, int mon, int day) { SYSTEMTIME st; GetSystemTime(&st); st.wYear=year; st.wMonth=mon; st.wDay=day; //st.wHour=hour; //st.wMinute=minute; // st.wSecond=sec; //st.wDayOfWeek= 0; //st.wMilliseconds= 0; return SetSystemTime(&st); }
--------------------编程问答--------------------
学习按时打发设法十分
--------------------编程问答--------------------
Qt 为了跨平台就要失去一些绑定系统的功能。
根据所需系统使用相应的API,在.pro里面可以设定对不同的系统使用不同的编译
--------------------编程问答--------------------
Qt好像搞不定,估计要用系统命令了,根据不同的系统使用不同的命令看看
--------------------编程问答--------------------
这方面好像还没有一个统一的解决方法。只能使用特定系统的api了。
--------------------编程问答--------------------
QT4里面可以这样把 QTime time=QTime::currentTime();
然后在转换显示的格式就可以啦
--------------------编程问答--------------------
设置系统时间 是平台 相关的
linux
stime
SRC: kernel/time.c
Windows
SetSystemTime
HEADER: Winbase.h / Windows.h
--------------------编程问答--------------------
我在windows系统下,在qt程序中调用setsystemtime函数设置系统时间,为什么最终的结果和我要设置的时间相差8个小时呢?有那位大侠知道什么原因吗?
--------------------编程问答--------------------使用setLocalTime
另外linux下,可以使用system()函数执行date命令设置系统时间日期
其实windows下也可以用WinExec()执行date命令和time命令设置日期,时间的
--------------------编程问答--------------------
如果开发板有触摸屏显示器的话,就可以通过Qtopia直接修改系统时间了啊。
--------------------编程问答--------------------
这个用system调用系统命令就可以了,不过要用超级用户的权限才行
--------------------编程问答--------------------
qt没有设置时间的函数吧
--------------------编程问答--------------------
利用qt执行不同系统下的修改时间的函数即可
--------------------编程问答--------------------
蛮久时间的帖子了,希望你能看到。。。
我也出现了这位同样的问题,显示的时间总与我设置的时间相差8个小时,随之连日期也会相差一天。。。。你说的setLocalTime具体该怎么用,可以说说?
--------------------编程问答--------------------
--------------------编程问答--------------------
真不好意思啊,没有分了无法提问,请楼主帮忙,谢谢了
我想开始做QT的编程,但是身边有没有这样的同事,想问下现在大家都是在哪个linux平台上做的,ubuntu?redhat el5? 还是别的什么?
因为和大家一个平台的话,有问题时好解决,谢谢!
--------------------编程问答--------------------
这个我做了,代码给你吧,
void adjustdate(int year,int mon,int mday,int hour,int min,int sec){
time_t t;
struct tm nowtime;
nowtime.tm_sec=sec;/* Seconds.[0-60] (1leapsecond)*/
nowtime.tm_min=min;/* Minutes.[0-59] */
nowtime.tm_hour=hour;/* Hours. [0-23]*/
nowtime.tm_mday=mday;/* Day.[1-31] */
nowtime.tm_mon=mon-1;/* Month. [0-11]*/
nowtime.tm_year=year-1900 ;/* Year-1900.*/
nowtime.tm_isdst=-1 ;/* DST.[-1/0/1]*/
t=mktime(&nowtime);
stime(&t);
} --------------------编程问答-------------------- 嗯。。。谢谢
--------------------编程问答--------------------
我做了一点修改,运行之后直接把系统时间改到了1970年1月1日,而且我的time edit和date edit不起作用呀?
#include "set_system_time.h"
#include "ui_set_system_time.h"
Set_System_Time::Set_System_Time(QWidget *parent) :
QDialog(parent),
ui(new Ui::Set_System_Time)
{
ui->setupUi(this);
connect(ui->timeEdit,SIGNAL(timeChanged(QTime)),this,SLOT(timeedit()));
connect(ui->dateEdit,SIGNAL(dateChanged(QDate)),this,SLOT(dateedit()));
}
Set_System_Time::~Set_System_Time()
{
delete ui;
}
void Set_System_Time::timeedit()
{
time_t st;
struct tm *p;
p=localtime(&st);
p->tm_hour=ui->timeEdit->time().hour();
p->tm_min=ui->timeEdit->time().minute();
st=mktime(p);
stime(&st);
}
void Set_System_Time::dateedit()
{
time_t st;
struct tm *p;
p=localtime(&st);
p->tm_year = ui->dateEdit->date().year();
p->tm_mon = ui->dateEdit->date().month();
p->tm_mday = ui->dateEdit->date().day();
st=mktime(p);
stime(&st);
}
--------------------编程问答--------------------
windows下的具体解决方法:
1.时差的解释:
http://blog.csdn.net/csu_yang/article/details/7073780
2.使用setLocalTime在windows XP下需要提升权限:
代码
BOOL ImproveProcPriv() { HANDLE token; //提升权限 if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token)) { MessageBox(NULL,"打开进程令牌失败...","错误",MB_ICONSTOP); return FALSE; } TOKEN_PRIVILEGES tkp; tkp.PrivilegeCount = 1; ::LookupPrivilegeValue(NULL,SE_SYSTEMTIME_NAME,&tkp.Privileges[0].Luid); tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL)) { MessageBox(NULL,"调整令牌权限失败...","错误",MB_ICONSTOP); return FALSE; } CloseHandle(token); return TRUE; }
补充:移动开发 , Qt