zenity 脚本设置系统日期和时间

来源:互联网 发布:指向数组指针的指针 编辑:程序博客网 时间:2024/05/16 02:02

记录于此,以便自己参考。

==============================================================

理论知识:设置系统日期和时间


初始日期格式

DATE="2010/08/20"


得到新的格式: 08/2010/20

NEWDATE=$(echo "$DATE" | awk --source 'BEGIN {FS="/"}' --source '{print $2 "/" $1 "/" $3}')


得到年

Y=$(echo $NEWDATE | sed "s/^...//" | sed "s/\/.*$//")


得到月

M=$(echo $NEWDATE | sed "s/\/.*$//")


得到日

D=$(echo $NEWDATE | sed "s/^........//" | sed "s/ .*$//")

或者

D=$(echo $NEWDATE | sed "s/^.\{8\}//" | sed "s/ .*$//")


初始时间格式

TIME=“19:20:50”


得到小时和分钟的格式:1920

H=$(echo $TIME | sed "s/^.* //" | sed "s/://g" | sed "s/..$//")


得到date命令需要的格式: date MMDDhhmm[[CC]YY][.ss],即:月 日 时 分 年(前2位) 年(后2位) 秒

DT=(echo $M$D$H$Y)


设置时间:

date $DT


设置硬件时间和系统时间同步

hwclock --systohc --localtime



=======================================================================


使用精确的时,分,秒 来设置

初始时间格式

TIME=“19:20:50”


小时:

h=$(echo $TIME | sed "s/^.* //" | awk --source 'BEGIN {FS=":"}' --source '{print $1}')

 

分钟:

m=$(echo $TIME | sed "s/^.* //" | awk --source 'BEGIN {FS=":"}' --source '{print $2}')


秒:

s=$(echo $TIME | sed "s/^.* //" | awk --source 'BEGIN {FS=":"}' --source '{print $3}')


得到date命令需要的格式: date MMDDhhmm[[CC]YY][.ss],即:月 日 时 分 年(前2位) 年(后2位) 秒

DT_NEW=$(echo $M$Y$h$m$D.$s)


设置时间:

date $DT_NEW


设置硬件时间和系统时间同步

hwclock --systohc --localtime



===========================================================================

也可以分别设置日期 和 时间,例如:

date -s 20100820

date -s 19:20:50


============================================================================

一个实际的例子:(只设置了日期)


#!/bin/bash


ZENITY=$(which zenity)

# TMP="/tmp/zenity_calendar.$$"

TITLE="请选择日期"

TEXT="鼠标点击,选择日期"


# get date format: 2011/09/01

DATE=$($ZENITY --calendar --title="$TITLE" --text="$TEXT" --date-format=%Y/%m/%d)


# exit if user press [Cancel] or X button

if [ "$?" != "0" ]; then

        exit

fi


# get newdate format: 09/2011/01

NEWDATE=$(echo "$DATE" | awk 'BEGIN {FS="/"} {print $2 "/" $1 "/" $3}')


# get year

Y=$(echo $NEWDATE | sed "s/^...//" | sed "s/\/.*$//")


# get month

M=$(echo $NEWDATE | sed "s/\/.*$//")


# get date

D=$(echo $NEWDATE | sed "s/^.\{8\}//" | sed "s/ .*$//")



# get date command format: date -s 20110901

DATE_SET=$(echo $Y$M$D)


# set date

date -s $DATE_SET


# sychronise hardclock and sysclock

hwclock --systohc --localtime