嵌入式 linux下date命令详解以及如何在Makefile中定义宏并在c中进行使用来定义软件版本
2019-07-12 17:14发布
生成海报
定义版本号:Makefile 示例:
EXEC = systools
#OBJS = *.c cgihtml/*.c channel/*.c md5/*.c
OBJS = *.c cgihtml/*.c md5/*.c rs2ip/*.c
#OBJS = *.c md5/*.c
VERSION="2.6.100"
#Notice that the date is GMT
BUILD_TIME="$(shell TZ=CST date -u "+%Y-%m-%d %H:%M:%S CST")"
all: $(EXEC)
$(EXEC): $(OBJS)
FLTFLAGS="$(FLTFLAGS) -s 65536"
$(CC) -DINHAND_INNER_VERSION="$(VERSION)" -DINHAND_PRODUCT_BUILD_TIME="$(BUILD_TIME)" $(LDFLAGS) -Imd5 -Irs2ip -I./ -o $@ $(OBJS) $(LIBCRYPT) $(LDLIBS$(LDLIBS_$@))
#$(CC) $(LDFLAGS) -Icgihtml -Imd5 -I./ -o $@ $(OBJS) $(LDLIBS$(LDLIBS_$@))
#$(CC) $(LDFLAGS) -Icgihtml -Ichannel -Imd5 -I./ -o $@ $(OBJS) $(LDLIBS$(LDLIBS_$@))
romfs:
$(ROMFSINST) /bin/$(EXEC)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
-rm -f $(EXEC) cgihtml/*.o
注:
红 {MOD}标记的变量在C是按照字符串进行打印即可!
date命令详解:
使用方式 :
date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
说明 :
date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
时间方面 :
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面 :
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数
参数 :
-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
--help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
--version : 显示版本编号
例子 :
显示时间后跳行,再显示目前日期 :
date '+%T%n%D'
显示月份与日数 :
date '+%B %d'
显示日期与设定时间(12:34:56) :
date --date '12:34:56'
注意 :
当你不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。
当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。
http://witmax.cn/linux-date.html
显示时间是个常用的命令,在写shell脚本中也经常会用到与日期相关文件名或时间显示。无论是linux还是windows下都是date命令。
Linux下date命令用法
date [OPTION]… [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date命令参数
-d, –date=STRING 显示STRING指定的时间 -f, –file=DATEFILE 类似–date参数显示DATEFILE文件中的每行时间 -ITIMESPEC, –iso-8601[=TIMESPEC] 以ISO 8601 格式显示日期/时间。TIMESPEC为”date”(只显示日期)、”hours”、”minutes”、”senconds”(显示时间精度)之一,默认为”date”。 -r, –reference=FILE 显示文件的最后修改时间 -R, –rfc-2822 以RFC-2822兼容日期格式显示时间 -s, –set=STRING 设置时间为STRING -u, –utc, –universal 显示或设定为Coordinated Universal Time时间格式
date命令输出显示格式
%% 字符% %a 星期的缩写(Sun..Sat) %A 星期的完整名称 (Sunday..Saturday) %b 月份的缩写(Jan..Dec) %B 月份的完整名称(January..December) %c 日期时间(Sat Nov 04 12:02:33 EST 1989) %C 世纪(年份除100后去整) [00-99] %d 一个月的第几天(01..31) %D 日期(mm/dd/yy)
%e 一个月的第几天 ( 1..31) %F 日期,同%Y-%m-%d
%g 年份(yy) %G 年份(yyyy)
%h 同%b %H 小时(00..23)
%I 小时(01..12)
%j 一年的第几天(001..366) %k 小时( 0..23)
%l 小时( 1..12)
%m 月份(01..12)
%M 分钟(00..59)
%n 换行 %N 纳秒(000000000..999999999) %p AM or PM
%P am or pm
%r 12小时制时间(hh:mm:ss [AP]M) %R 24小时制时间(hh:mm)
%s 从00:00:00 1970-01-01 UTC开始的秒数 %S 秒(00..60)
%t 制表符 %T 24小时制时间(hh:mm:ss) %u 一周的第几天(1..7); 1 表示星期一 %U 一年的第几周,周日为每周的第一天(00..53) %V 一年的第几周,周一为每周的第一天 (01..53) %w 一周的第几天 (0..6); 0 代表周日 %W 一年的第几周,周一为每周的第一天(00..53) %x 日期(mm/dd/yy)
%X 时间(%H:%M:%S)
%y 年份(00..99)
%Y 年份 (1970…)
%z RFC-2822 风格数字格式时区(-0500) %Z 时区(e.g., EDT), 无法确定时区则为空
以下是做的一些实验,便于理解
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$ date -d "2010-11-15 23:00:01"
Mon Nov 15 23:00:01 PST 2010
$ date -d "2010/11/15 23:0:2"
Mon Nov 15 23:00:02 PST 2010
$ date -d "2010/11/15T23:0:2"
Mon Nov 15 08:00:02 PST 2010
$
$ echo "2010-11-15 23:00:01" > date.txt
$ echo "2010/11/15 23:00:02" >> date.txt
$ cat date.txt
2010-11-15 23:00:01
2010/11/15 23:00:02
$ date -f date.txt
Mon Nov 15 23:00:01 PST 2010
Mon Nov 15 23:00:02 PST 2010
$
$ ls -l
total 4
-rw-r--r-- 1 znan sybase 40 Nov 15 21:14 date.txt
$ date -r date.txt
Mon Nov 15 21:14:36 PST 2010
$
$ date -I
2010-11-15
$ date -Ihours
2010-11-15T21-0800
$ date -Iminutes
2010-11-15T21:16-0800
$ date -Iseconds
2010-11-15T21:16:24-0800
$
$ date -R
Mon, 15 Nov 2010 21:47:08 -0800
$ date -u
Tue Nov 16 05:47:13 UTC 2010
$
$ date +"Today is %A."
Today is Monday.
$ date +"Date:%b. %e, %G"
Date:Nov. 15, 2010
$ date +"Date: %b.%e, %G"
Date: Nov.15, 2010
$ date +"%x %X"
11/15/2010 09:50:21 PM
$ date +"%Y-%m-%d %H:%M:%S"
2010-11-15 21:51:32
$ date +"%Y-%m-%d %I:%M:%S %p"
2010-11-15 09:51:55 PM
$
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮