在linux Shell中并没有毫秒级的时间单位,只有秒和纳秒。所以在shell中可以获取秒级时间戳,但是不能获取毫秒级时间戳。
有时候确实需要毫秒级时间戳,于是使用秒和纳秒的时间戳来组合一下。通常我们看到的都是如下写法:
这个方法你快速地反复去执行,大概五六次就会出现一次报错 value too great for base 。
date '+%N' 获取纳秒时获取的是一个字符串,而不是数字,且为了保证九位数,前面会补0,例如 073526864 。遇到首字母为0的字符串,shell正常的除法不能自动将其转换为数字(是的,虽然你看不到有数据类型,但是他是分数字和字符串类型的,并且使用的时候一般都隐含了类型转换,lua也有这个问题,被坑过无数次)。
使用 expr命令 。
需要注意的是乘法符号 需要写成 \ ,不然无法识别为乘法符号。
1秒=1000毫秒(ms),1毫秒=1/1000秒(s);
1秒=1000000 微秒(μs),1微秒=1/1000000秒(s);
1秒=1000000000 纳秒(ns),1纳秒=1/1000000000秒(s);
一兆为1000000,一千兆为1000000000。
扩展资料
秒是国际单位制中时间的基本单位,符号是s。有时也会借用英文缩写标示为sec。
微秒,简称μs。光在这个时间里可以传播300米,大约是3个足球场的长度,但是海平面上的声波只能传播1/3毫米。高速的商业频闪仪闪烁一次大约持续1微秒。一筒炸药在它的引信烧完之后大约24微秒开始爆炸。
纳秒,简称ns。常用作内存读写速度的单位。光在真空中一纳秒仅传播30厘米(不足一个步长)。个人电脑的微处理器执行一道指令(如将两数相加)约需2至4纳秒。另一种罕见的亚原子粒子K介子的存在时间为12纳秒。
兆表示数量时:
1兆=1万亿
由小到大依次为一、十、百、千、万、亿、兆、京、垓、秭、穰、沟、涧、正、载、极、恒河沙、阿僧祇、那由他、不可思议、无量大数,万以下是十进制,万和亿之间为万进制,即万万为亿,亿以后为亿进制,即亿(万万)亿为兆,亿(万万)兆为京,亿(万万)京为垓以此类推到载;
兆表示电力学单位时:
1兆瓦=100万瓦
计算机里的用法:1兆 就是1MB。在信息字节学上,1兆字节 =1MB=1,048,576字节;1G等于1024MB,1MB等于1024KB。
M就是英文Mega的简写,意思是百万或兆;B就是Byte的英文简写,意思是字节;K就是英文Kilo的简写,意思是千;G就是英文Giga的简写,意思是十亿或千兆
1纳秒(ns)=1e-9秒(s)。
光在真空中一纳秒仅传播03米。个人电脑的微处理器执行一道指令(如将两数相加)约需2至4纳秒。一种罕见的亚原子粒子K介子的存在时间为12纳秒。
国际单位制词头经常与秒结合以做更细微的划分,例如ms(毫秒,千分之一秒)、μs(微秒,百万分之一秒)和ns(纳秒,十亿分之一秒)。
虽然国际单位制词头虽然也可以用于扩增时间,例如Ks(千秒)、Ms(百万秒)和Gs(十亿秒),但实际上很少这样子使用,大家都还是习惯用60进制的分、时和24进制的日做为秒的扩充。
扩展资料:
以六十进制细分时,使得秒是一太阳日的86,400分之一。此处虽然如此表示,但很难相信古希腊人需要定义秒古希腊的时间周期。
像是平朔望月定义得非常精确,因为他们不是观察单一的朔望月,而是以相距数百年的食来测量朔望月的平均长度(日数)。
不过,发展出摆钟来保持平时(相对于日晷所显示的视时),使得秒成为可测量的时间单位。秒摆的摆长在1660年被伦敦皇家学会提出作为长度的单位,在地球表面,摆长约一米的单摆,一次摆动或是半周期(没有反复的一次摆动)的时间大约是一秒。
参考资料来源:百度百科-秒
参考资料来源:百度百科-纳秒
分类: 电子数码
解析:
时间的单位换算
1秒=1000毫秒(ms)
1毫秒=1/1,000秒(s)
1秒=1,000,000 微秒(μs)
1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns)
1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps)
1皮秒=1/1,000,000,000,000秒(s)
RTC时间 *** 作:
1rtc时间是由rtc硬件控制的,所以在linux中想要修改和获取rtc时间就只能通过驱动的接口来获取和修改。
intrtc_test(void)
{
structrtc_timertc;
intfd=-1;
intret=-1;
fd=open("/dev/rtc0",O_RDWR);
if(fd<0){
return-1;
}
ret=ioctl(fd,RTC_RD_TIME,&rtc);
if(ret<0){
return-1;
}
printf("\nCurrentRTCdata/timeis%d-%d-%d,%02d:%02d:%02d\n",rtctm_mday,rtctm_mon+1,
rtctm_year+1900,rtctm_hour,rtctm_min,rtctm_sec);
ret=ioctl(fd,RTC_SET_TIME,&rtc);
if(ret<0){
return-1;
}
return0;
}
2除了上面这种方式 *** 作rtc时间以外,linux中也有一个命令可以简化rtc时间 *** 作,hwclock,比如,可以通过system("hwclock-w");系统调用来把xtime设置到rtc硬件。
墙上时间(realtime、xtime):
linux系统中主要使用的就是xtime,它是系统运行的基础,很多程序都是依赖于xtime来运行的,接下来将介绍将如何 *** 作xtime。
1获取、设置微秒级别的时间:
#include
#include
structtimeval
{
inttv_sec;
inttv_usec;
};
intgettimeofday(structtimevaltv,structtimezonetz);
intsettimeofday(conststructtimevaltv,conststructtimezonegz);
功能描述:
gettimeofday()获取当前时间,有tv指向的结构体返回。
settimeofday()把当前时间设成由tv指向的结构体数据。当前地区信息则设成tz指向的结构体数据。
2获取秒级别的时间
typedeflongtime_t;
time_ttime(time_tt);
如果t是non-null,它将会把时间值填入t中
3内核26版本后新增的clockapi接口
获取纳秒级别的时间
structtimespec{
time_ttv_sec;/秒s/
longtv_nsec;/纳秒ns/
};
intclock_getres(clockid_tclk_id,structtimespecres);
intclock_gettime(clockid_tclk_id,structtimespectp);
intclock_settime(clockid_tclk_id、conststructtimespectp);
编译连接时采用-lrt才能编译通过。
clk_id可选参数:
CLOCK_REALTIME
系统全局的实时时钟设置此时钟需要合适的权限
CLOCK_MONOTONIC
只能被读取,无法被设置,表示monotonic时间起点
CLOCK_PROCESS_CPUTIME_ID
从cpu每进程的高分辨率计时器
CLOCK_THREAD_CPUTIME_ID
线程的特定cpu时间时钟
系统启动时,会首先从rtc中读取rtc时间,并设置给xtime,而当ntp对系统时间进行更新时,首先设置xtime,然后调用hwclock设置到rtc硬件中。xtime根据需要的精度,可以通过上面几个接口来选择使用。
以上就是关于shell脚本获取时间戳偶尔报错value too great for base全部的内容,包括:shell脚本获取时间戳偶尔报错value too great for base、微秒、纳秒、秒,1 千 兆 的换算、一纳秒等于多少秒等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)