1.首先,转一下:
问:Linux下如何保存设置的系统时间?
答:分以下步骤进行:
(1)通过开发板控制台设置开发板的当前系统时间:
date [MMDDhhmm[[CC]YY][.ss]]
例如:
date 010410462008
(2)将系统时间写入RTC:
hwclock -w
读出检验一下,写入是否正确:
hwclock -r
(3)修改开发板根文件系统中的/etc/init.d/rcS文件,
添加一行:
hwclock -s 或都/sbin/hwclock -s
用于在系统启动时从RTC读出日期时间并设置到系统时间。
(4)重新启动开发板,验证系统时间是否争取。
另注:
语法格式:
hwclock [--adjust][--debug][--hctosys][--show][--systohc][--test]
[--utc][--version][--set --date=<日期与时间>]
参数说明:
- –adjust or -a
hwclock每次更改硬件时钟时,都会记录在/etc/adjtime文件中。使用adjust参数,可使hwclock根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟。
- –hctosys or -s
将系统时钟调整为与目前的硬件时钟一致。
- –set –date=<日期与时间>
设定硬件时钟。
- –show or -r
显示硬件时钟的时间与日期。
- –systohc or -w
将硬件时钟调整为与目前的系统时钟一致。
- –version or -v
显示版本信息。
- –debug
显示hwclock执行时详细的信息。
- –test
仅测试程序,而不会实际更改硬件时钟。
- –utc
若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作。
同步系统时钟和硬件时钟
# hwclock –w
设置硬件时钟时间:
# hwclock --set --date="9/8/2007 16:45:05"
查看硬件时钟
# hwclock -r1.在虚拟终端中使用date命令来查看和设置系统时间
查看系统时钟的操作:
# date
设置系统时钟的操作:
# date 091713272003.30
通用的设置格式:
# date 月日时分年.秒
2.使用hwclock或clock命令查看和设置硬件时钟
查看硬件时钟的操作:
# hwclock --show 或
# clock --show
2003年09月17日 星期三 13时24分11秒 -0.482735 seconds
设置硬件时钟的操作:
# hwclock --set --date="09/17/2003 13:26:00"
或者
# clock --set --date="09/17/2003 13:26:00"
通用的设置格式:hwclock/clock --set --date=“月/日/年时:分:秒”。
3.同步系统时钟和硬件时钟
Linux系统(笔者使用的是Red Hat 8.0,其它系统没有做过实验)默认重启后,硬件时钟和系统时钟同步。如果不大方便重新启动的话(服务器通常很少重启),使用clock或hwclock命令来同步系统时钟和硬件时钟。
硬件时钟与系统时钟同步:
# hwclock --hctosys
或者
# clock --hctosys
上面命令中,--hctosys表示Hardware Clock to SYStem clock。
系统时钟和硬件时钟同步:
# hwclock --systohc
或者
# clock --systohc
2.我的方法
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
lineedit=new QLineEdit(this);
lineedit->setGeometry(0,100,200,20);
connect(lineedit,SIGNAL(returnPressed()),this,SLOT(changedate()));
lineedit->setValidator(new QIntValidator(lineedit));
}
void Widget::changedate()
{
QString valueStr=lineedit->text();
long valueInt=valueStr.toInt();
qDebug()<<valueInt;
int year=valueInt/100000000;
qDebug()<<year;
int mon=(valueInt%100000000)/1000000;
qDebug()<<mon;
int mday=((valueInt%100000000)%1000000)/10000;
qDebug()<<mday;
int hour=(((valueInt%100000000)%1000000)%10000)/100;
qDebug()<<hour;
int min=(((valueInt%100000000)%1000000)%10000)%100;
qDebug()<<min;
adjustdate(year+2000,mon,mday,hour,min,0);
}
void Widget::adjustdate(int year,int mon,int mday,int hour,int min,int sec)
{
nowtime.tm_sec=sec;/* Seconds.[0-60](1 leap second)*/
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);
}
3.用QLineEdit来实例一个lineedit,然后让它只能输入数字,我发现,尼玛,最多输入十个,好吧对我来说足够了,用两位表示年份就可以了,其他的月日小时分都是2个,秒钟就自己设置算了,最后调用了一个C里面的结构体,我要申明这个adjustdate函数是我网上找的,在比较了用date -s system() QProcess QDateTime这些东西之后,我发现还是我的最好。。。啦啦啦,结束!