当前位置:编程学习 > wap >>

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个小时呢?有那位大侠知道什么原因吗? 

--------------------编程问答--------------------
引用 10 楼 wzcyt 的回复:
我在windows系统下,在qt程序中调用setsystemtime函数设置系统时间,为什么最终的结果和我要设置的时间相差8个小时呢?有那位大侠知道什么原因吗?

使用setLocalTime
另外linux下,可以使用system()函数执行date命令设置系统时间日期

其实windows下也可以用WinExec()执行date命令和time命令设置日期,时间的 

--------------------编程问答-------------------- 

如果开发板有触摸屏显示器的话,就可以通过Qtopia直接修改系统时间了啊。 

--------------------编程问答-------------------- 

这个用system调用系统命令就可以了,不过要用超级用户的权限才行 

--------------------编程问答-------------------- 

qt没有设置时间的函数吧 

--------------------编程问答-------------------- 

利用qt执行不同系统下的修改时间的函数即可 

--------------------编程问答-------------------- 

蛮久时间的帖子了,希望你能看到。。。

我也出现了这位同样的问题,显示的时间总与我设置的时间相差8个小时,随之连日期也会相差一天。。。。
你说的setLocalTime具体该怎么用,可以说说?
引用 14 楼  的回复:
引用 10 楼 wzcyt 的回复:
我在windows系统下,在qt程序中调用setsystemtime函数设置系统时间,为什么最终的结果和我要设置的时间相差8个小时呢?有那位大侠知道什么原因吗?
使用setLocalTime
另外linux下,可以使用system()函数执行date命令设置系统时间日期
其实windows下也可以用WinExec()执行date命令和time……

--------------------编程问答--------------------

--------------------编程问答-------------------- 

真不好意思啊,没有分了无法提问,请楼主帮忙,谢谢了


我想开始做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); 
} --------------------编程问答-------------------- 嗯。。。谢谢
引用 22 楼  的回复:
这个我做了,代码给你吧,
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;/* Mi……
--------------------编程问答--------------------
引用 22 楼  的回复:
这个我做了,代码给你吧,
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;/* Mi……


我做了一点修改,运行之后直接把系统时间改到了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);
}
--------------------编程问答--------------------
引用 19 楼  的回复:
蛮久时间的帖子了,希望你能看到。。。
我也出现了这位同样的问题,显示的时间总与我设置的时间相差8个小时,随之连日期也会相差一天。。。。
你说的setLocalTime具体该怎么用,可以说说?
引用 14 楼  的回复:
引用 10 楼 wzcyt 的回复:
我在windows系统下,在qt程序中调用setsystemtime函数设置系统时间,为什么最终的结果和我要设置的时间相差……

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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,