linux获取系统时间 linux用脚本获取实时时间
大家好,今天小编来为大家解答linux获取系统时间这个问题,linux用脚本获取实时时间很多人还不知道,现在让我们一起来看看吧!
Linux查看系统时间
date命令的功能是显示和设置系统日期和时间。
该命令的一般格式为: date [选项]显示时间格式(以+开头,后面接格式)
date设置时间格式
命令中各选项的含义分别为:
-d datestr,--date datestr显示由datestr描述的日期
-s datestr,--set datestr设置datestr描述的日期
-u,--universal显示或设置通用时间时间域
% H小时(00..23)
% I小时(01..12)
% k小时(0..23)
% l小时(1..12)
% M分(00..59)
% p显示出AM或PM
% r时间(hh:mm:ss AM或PM),12小时
% s从1970年1月1日00:00:00到目前经历的秒数
% S秒(00..59)
% T时间(24小时制)(hh:mm:ss)
% X显示时间的格式(%H:%M:%S)
% Z时区日期域
% a星期几的简称( Sun..Sat)
% A星期几的全称( Sunday..Saturday)
% b月的简称(Jan..Dec)
% B月的全称(January..December)
% c日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d一个月的第几天(01..31)
% D日期(mm/dd/yy)
% h和%b选项相同
% j一年的第几天(001..366)
% m月(01..12)
% w一个星期的第几天(0代表星期天)
% W一年的第几个星期(00..53,星期一为第一天)
% x显示日期的格式(mm/dd/yy)
% y年的最后两个数字( 1999则是99)
% Y年(例如:1970,1996等)
需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。
下列环境变量将会影响到 date命令的执行效果。
LANG确定在 LC_ALL和相应的环境变量(以 LC_开头)都不指定语言环境的时候将要使用的缺省语言环境。
LC_ALL确定用于覆盖由 LANG或任何以 LC_开头的环境变量设置的任何语言环境类别值的语言环境。
LC_CTYPE确定文本数据的字节序列解释为字符时使用的语言环境(例如参数中单对多字节字符)。
LC_MESSAGES决定写信息应使用的语言。
LC_TIME确定由 date写入的日期和时间字符串的内容。
NLSPATH为处理 LC_MESSAGES决定消息目录的位置。
TZ指定时间和日期使用的时区,除非指定了-u选项。如果未设置 TZ变量且未指定-u标志,则使用非指定的系统缺省时区。
使用示例一:
#date//显示当前日期
#date-s//设置当前时间,只有root权限才能设置,其他只能查看。
#date-s 20061010//设置成20061010,这样会把具体时间设置成空00:00:00
#date-s 12:23:23//设置具体时间,不会对日期做更改
#date-s“12:12:23 2006-10-10″//这样可以设置全部时间
CST:中国标准时间(China Standard Time),这个解释可能是针对RedHat Linux。
UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间”Universal Time/Temps Cordonné”而来。中国大陆、香港、澳门、台湾、蒙古国、新加坡、马来西亚、菲律宾、澳洲西部的时间与UTC的时差均为+8,也就是UTC+8。
GMT:格林尼治标准时间(旧译格林威治平均时间或格林威治标准时间;英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
设置完系统时间后,还需要同步到硬件时钟上
# clock--systohc
硬件时钟与系统时钟同步:
# hwclock--hctosys
或者
# clock--hctosys
上面命令中,--hctosys表示Hardware Clock to SYStem clock。
系统时钟和硬件时钟同步:
# hwclock--systohc
或者
# clock--systohc
使用示例二:
用指定的格式显示时间。
$ date‘+This date now is=>%x,time is now=>%X,thank you!'
This date now is=>11/12/99,time is now=>17:53:01,thank you!
用预定的格式显示当前的时间。
# date
Fri Nov 26 15:20:18 CST 1999
设置时间为下午14点36分。
# date-s 14:36:00
Fri Nov 26 14:15:00 CST 1999
设置时间为1999年11月28号。
# date-s 991128
Sun Nov 28 00:00:00 CST 1999
设置一天前
date--date"1 days ago"+"%Y-%m-%d"
Date命令参数小技巧
由于Linux对man date-d参数说的比较模糊,故举例如下:
#-d,--date=STRING display time described by STRING, not `now'
For Linux
[root@linuxso.com~ ]# date-d next-day+%Y%m%d
20060328
[root@linuxso.com~ ]# date-d last-day+%Y%m%d
20060326
[root@linuxso.com~ ]# date-d yesterday+%Y%m%d
20060326
[root@linuxso.com~ ]# date-d tomorrow+%Y%m%d
20060328
[root@linuxso.com~ ]# date-d last-month+%Y%m
200602
[root@linuxso.com~ ]# date-d next-month+%Y%m
200604
[root@linuxso.com~ ]# date-d next-year+%Y
2007
------------------------------------------
而FreeBSD则不同;举例如下:
For FreeBSD
[root@linuxso.com~]# date-v-1d+%Y%m%d
20060326
[root@linuxso.com~]# date-v-1m+%Y%m%d
20060227
[root@linuxso.com~]# date-v-1y+%Y%m%d
20050327
使用示例三:
在linux环境下要取得几天前的时期只要使用
date-d"x days ago"+%Y%m%d
x用数字代替,如果需要几天前的直接写正数,如果要几天后的日期直接写负数即可;
date-d"x weeks ago"+%Y%m%d
x用数字代替,如果需要几周前的直接写正数,如果要几周后的日期直接写负数即可;
date-d"x years ago"+%Y%m%d
x用数字代替,如果需要几年前的直接写正数,如果要几年后的日期直接写负数即可;
看下面例子:
[root@linuxso.com~]# date+%Y%m%d
20100107
上面是今天的日期20100107
[root@linuxso.com~]# date-d"2 days ago"+%Y%m%d
20100105
上面是两天前的日期
[root@linuxso.com~]# date-d"4 days ago"+%Y%m%d
20100103
上面是四天前的日期
[root@linuxso.com~]# date-d"-1 days ago"+%Y%m%d
20100108
上面是一天后的日期
[root@linuxso.com~]# date-d"-2 days ago"+%Y%m%d
20100109
上面是两天后的日期
[root@linuxso.com~]# date-d"1 week ago"+%Y%m%d
20091231
上面是一周前的日期
[root@linuxso.com~]# date-d"1 year ago"+%Y%m%d
20090107
上面是一年前的日期
Linux下C语言获得系统时间的方法
没有完整程序,不过能提供一点资料
int gettimeofday(struct timeval* tv,struct timezone*tz);
这个函数可以获取当前时间,貌似只要第一个结构体就行了
struct timeval
{
time_t tv_sec;//秒 [long int]
suseconds_t tv_usec;//微秒 [long int],(10E-6 second)
};
struct timeval
{
long tv_sec;
long tv_usec;
};
然后取微秒的前三位就是小数了,之后把秒 tv_sec转化为 tm格式,参数用秒的指针就行
struct tm* gmtime(const time_t* t);
//转换成格林威治时间。有时称为GMT或UTC。
struct tm* localtime(const time_t*t);
//转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间.
下面是tm的部分参数
int tm_sec;//tm_sec表「秒」数,在[0,61]之间,多出来的两秒是用来处理跳秒问题用的。/* Seconds: 0-59(K&R says 0-61?)*/
int tm_min;//tm_min表「分」数,在[0,59]之间。
int tm_hour;//tm_hour表「时」数,在[0,23]之间。
int tm_mday;//tm_mday表「本月第几日」,在[1,31]之间。
int tm_mon;//tm_mon表「本年第几月」,在[0,11]之间。
int tm_year;//tm_year要加1900表示那一年。/*/*年份,其值从1900开始*/*/
int tm_wday;//tm_wday表「本周第几日」,在[0,6]之间。/* Days since Sunday(0-6)*//*其中0代表星期天,1代表星期一,以此类推*/
int tm_yday;//tm_yday表「本年第几日」,在[0,365]之间,闰年有366日。/*其中0代表1月1日,1代表1月2日,以此类推*/*/
int tm_isdst;//tm_isdst表是否为「日光节约时间」
------------------------------华丽丽的分割线--------------------------------------------------
由于很长时间没编程了,也没有Linux环境,我就简单写几行代码,仅作参考
#include<stdio.h>
#include<time.h>
#include<sys/time.h>
#include<unistd.h>
//这四个不一定够用了
struct timeval tv;
struct timezone tz;
struct tm* p_tm;
//变量没有初始化习惯不好,不要学
gettimeofday(&tv,&tz);
p_tm= gmtime((const time_t*)&tv.tv_sec);
字符串的组装尤其格式问题自己解决吧
年 p_tm->tm_year+ 1900
月 p_tm->tm_mon+ 1
日 p_tm->tm_mday
时 p_tm->tm_hour+ 1
分 p_tm->tm_min+ 1
秒 p_tm->tm_sec+ 1
小数点后面的部分,注意不够三位还是前面填充0 tv.tv_sec/1000
linux怎么查看当前系统时间
date命令的功能是显示和设置系统日期和时间。该命令的一般格式为: date [选项]显示时间格式(以+开头,后面接格式)
date设置时间格式命令中各选项的含义分别为:-d datestr,--date datestr显示由datestr描述的日期-s datestr,--set datestr设置datestr描述的日期-u,--universal显示或设置通用时间时间域% H小时(00~ ]# date-d next-day+%Y%m%d
20060328
[root@linuxso~ ]# date-d yesterday+%Y%m%d
20060326
[root@linuxso~ ]# date-d last-month+%Y%m
200602
[root@linuxso~ ]# date-d next-year+%Y
2007------------------------------------------而FreeBSD则不同;举例如下:
For FreeBSD
[root@linuxso~]# date-v-1m+%Y%m%d
20060227
[root@linuxso~]# date+%Y%m%d
20100107上面是今天的日期20100107
[root@linuxso~]# date-d"4 days ago"+%Y%m%d
20100103上面是四天前的日期 [root@linuxso~]# date-d"-2 days ago"+%Y%m%d
20100109上面是两天后的日期
[root@linuxso~]# date-d"1 year ago"+%Y%m%d
20090107上面是一年前的日期