shell脚本获取时间戳偶尔报错value too great for base

shell脚本获取时间戳偶尔报错value too great for base,第1张

  在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 千 兆 的换算、一纳秒等于多少秒等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9507923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存