shell获取时间精确到毫秒级别是哪个命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell获取时间精确到毫秒级别是哪个命令相关的知识,希望对你有一定的参考价值。

1、首先打开代码编辑器。选择bash脚本语言。

2、然后输入current_time=$(date  "+%Y%m%d-%H%M%S)后面的有百分号的一串是格式控制,意思是按年月日,时分秒的格式存入current_time变量中。

3、然后输入 echo $current_time这里的意思是在终端显示current_time变量的内容。

4、然后保存为test.sh。

5、然后在终端输入 chmod +x test.sh为文件夹执行权限。

6、最后输入./test.sh进行执行,文件成功输出时间。

参考技术A

1、运行cmd进入到dos界面。

2、这里我们使用一个命令time。

3、我们回车看看结果显示了当前时间为当前时间: 18:00:58.44精确到了毫秒。

4、我们再次输入time这个命令看看正确不 和系统时间对比时分数能对应上。

5、如果觉得在dos里看起不舒服这个命令我们可以做为bat然后保存到txt文档。我们输入time >a.txt。保存为bat然后运行。

6、运行后在同目录可以看到a.txt。

参考技术B 使用 date +%s%N 可以获得一个纳秒级的unix时间戳(当前时间),然后根据需要截取一部分即可得到毫秒级的精度
例如 echo $[$(date +%s%N)/1000000] 即为毫秒级时间戳

如果是指定某个时间字符串对应的时间戳,则将上面的 date +%s%N 更改为
date -d "时间字符串" +%s%N本回答被提问者采纳
参考技术C # date "+%Y-%m-%d %H:%M:%S.%N"      显示年月日时分秒毫秒2018-06-06 16:35:02.955352720
# date "+%Y%m%d%H%M%S%N"       可以用作时间戳20180606163640400503349

shell脚本示例:计算毫秒级微秒级时间差

bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html


有时候需要计算命令的执行时间长度,可以使用time命令,虽然time命令可以精确到毫秒级,但time命令无法计算一堆命令的执行时间。可以直接使用date命令计算命令执行前后的时间差,但直接使用date命令计算时间差只能精确到秒级。因此,要计算毫秒级或者微秒级的时间长度,需要对date命令的结果进行一番计算转换。

本文只给出了毫秒级时间差的计算方法,若要计算微秒级时间差,对脚本稍作修改即可。

脚本如下:

#!/bin/bash
###########################################################
#  description: get msec level time delay                 #
#  author     : 骏马金龙                                   #
#  blog       : http://www.cnblogs.com/f-ck-need-u/       #
###########################################################

# filename: msec_diff.sh

function timediff() {

# time format:date +"%s.%N", such as 1502758855.907197692
    start_time=$1
    end_time=$2
    
    start_s=${start_time%.*}
    start_nanos=${start_time#*.}
    end_s=${end_time%.*}
    end_nanos=${end_time#*.}
    
    # end_nanos > start_nanos? 
    # Another way, the time part may start with 0, which means
    # it will be regarded as oct format, use "10#" to ensure
    # calculateing with decimal
    if [ "$end_nanos" -lt "$start_nanos" ];then
        end_s=$(( 10#$end_s - 1 ))
        end_nanos=$(( 10#$end_nanos + 10**9 ))
    fi
    
# get timediff
    time=$(( 10#$end_s - 10#$start_s )).`printf "%03d\\n" $(( (10#$end_nanos - 10#$start_nanos)/10**6 ))`
    
    echo $time
}

#start=$(date +"%s.%N")
# Now exec some command
#end=$(date +"%s.%N")
# here give the values start=1502758855.907197692 end=1502758865.066894173
timediff $start $end

 执行该脚本:

[root@xuexi ~]# bash microsecond_diff.sh
9.159

可见结果精确到了毫秒级。

脚本说明:

(1).为了计算毫秒级时间差,所以使用date +"%s.%N"格式。其中"%s"是计算从1970-01-01 00:00:00到当前时间点经过的总秒数,所以计算两个"%s"的差值就计算出了两个时间点的秒级时间差。"%N"是每个时间点的纳秒部分,由于date命令中无法直接得到精确到毫秒的时间,因此只能通过纳秒来计算并转换,于是两个时间点的"%N"就可以计算出纳秒级的时间差。

但需要注意的是,计算纳秒时间差时要考虑是否要将1秒转换成10^9纳秒,以确保纳秒相减时一定得到正数值。

(2)."%N"的纳秒部分如果长度小于9,将以0补齐。例如999纳秒,将补齐为000000999。但在数学计算时,以0开头的数值默认会被当作八进制计算,因此需要强行保证它以10进制计算,需要使用"10#"。数学表达式相关内容参见man bash的Arithmetic Evaluation部分。

(3).由于date命令获取到的%s和%N在同一字符串内,因此需要将其分割开来,在上述脚本中采用的是变量切分的方法。

(4).由于纳秒转换成毫秒时," (end_nanos - start_nanos)/10**6 "的结果可能会忽略最前面的0,例如"(123456789-103456789)/10**6 = 20,表示20毫秒,在连接整数位和小数点时,需要用0补齐3位毫秒数,比如"1.020",所以上面加了一个printf。

以上是关于shell获取时间精确到毫秒级别是哪个命令的主要内容,如果未能解决你的问题,请参考以下文章

shell获取时间精确到毫秒级别是哪个命令

shell获取时间戳

Jmeter函数-时间函数多种用法

Java获取时间戳精确到年月日时

PHP——获取当前时间精确到毫秒(yyyyMMddHHmmssSSS)

java获取当前时间精确到毫秒