shell date学习以及正确获取时间戳的姿势

shell date学习以及正确获取时间戳的姿势

最好的方法

2020.05.08

# 毫秒时间戳
date +%s%3N
# 微秒时间戳(不确定是否精确)
date +%s%6N

获取时间戳

  1. 获取从1970-01-01 00:00:00 UTC到现在的秒数

    cur_sec=`date '+%s'`
    
  2. 获取纳秒

    cur_ns=`date '+%N'`
    
  3. 合并为时间戳

    cur_timestamp=$((`date '+%s'`*1000+`date '+%N'`/1000000))
    
  4. 重点

    我在获取时间戳的时间是没有将第一二步的字符串放入到第三步中的,因为第一二步分别是两次获取两个时间的不同部分。第一步先获取了时间A的秒数,第二步获取了时间A后面某个时间B的纳秒,然后合并到第三步必然导致比第三步更大的误差。

    代码如下:

    cur_sec_and_ns=`date '+%s-%N'`
    Ncur_ns=`date '+%N'`
    cur_sec=${cur_sec_and_ns%-*}
    cur_ns=${cur_sec_and_ns##*-}
    cur_timestamp=$((cur_sec*1000+cur_ns/1000000))
    timestamp2=$((cur_sec*1000+Ncur_ns/1000000))
    echo 当前秒_纳秒=$cur_sec_and_ns
    echo 当前秒=$cur_sec
    echo 当前纳秒=$cur_ns
    echo 第二次获取的纳秒=$Ncur_ns
    echo 当前时间戳=$cur_timestamp
    echo 分开获取的时间戳=$timestamp2
    

    如图:
    在这里插入图片描述
    通过结果可以看出分别获取秒数和纳秒,将导致时间戳有1的误差。

    所以,既然使用了时间戳,那么请不要分两次获取秒、纳秒。

选项

  1. -d,–date=STRING
    STRING格式中年月日(2018年12月18日)为2018-12-11、2018/12/11、12/11/2018等,12-11-2018、12/2018/11等不合法。时分秒格式(12时48分41秒)为12:48:41。

  2. –debug

    查看具体的解析过程,可以看出12/11/2018格式不是最好的格式,会出现warning。

    --debug示例

    最好的格式是2018-12-11。

--debug示例

  1. -f,–file

    指定文件解析时间,文件的某一行如果不符合date格式,不影响后续的解析。

    --file示例

  2. -I[FMT],–iso-8601=[FMT]

    FMT有date、hours、minutes、seconds、ns。默认使用date。支持缩写,如hours=hour=h。[FMT]在zsh中可以补全。
    –iso-8601=[FMT]

  3. -R,–rfc-email
    输出格式为RFC 5322格式的日期。
    --rfc-email

  4. –rfc-3339=[FMT]
    输出格式为RFC 3339格式的日期。
    在这里插入图片描述

  5. -r,–reference=FILE

    输出FILE上一次修改的时间。

  6. -s,–set=STRING

    设置系统时间。

  7. -u,–utc,–universal

    输出UTC格式的时间。

  8. –version

  9. 通过FORMAT控制输出。

    符号意义
    %%%的转义
    %a当地星期几的缩写,例如Sun、日
    %A当地星期几的全称,例如Sunday、星期二
    %b当地月份的缩写,例如Jan、12月
    %B当地月份的全称,例如January、十二月
    %c当地日期和时间,例如Thu Mar 3 23:05:25 2005,2018年12月18日 星期二 15时46分23秒
    %C输出世纪,例如现在是2
    %d当前月份的第几天,例如18(2018-12-18)
    %D日期,格式与%m%d%y,年为两位数,例如12/18/18
    %e当前月份的第几天,例如08(2018-12-08)
    %F完整格式的日期,与%Y-%m-%d相同,例如2018-12-18
    %g年份中的后两位数,例如18
    %G
    %h与%b一样
    %H小时(00…23)
    %I小时(01…12)
    %j一年中的第几天(001…366)
    %k小时(1…23)
    %l小时(1…12)
    %m月(01…12)
    %M分(01…59)
    %n新行
    %N纳秒(000000000…999999999)
    %p当地上午或下午,例如PM、下午
    %P当地上午或下午(小写),例如pm、下午
    %q第几季(1…4)
    %r当地12小时制的时间格式,例如下午 04时06分24秒
    %R24小时制的时分(%H:%M),例如16:07
    %s从1970-01-01 00:00:00 UTC到现在的秒数
    %S当前分钟的秒数(00…59)
    %T格式为%H:%M:%S,时分秒
    %u从星期一开始数,一周中的第几天(1…7)
    %U从星期日开始数,一年中的第几周(00…53)
    %VISO周数,从周一开始数(01…53)
    %w从周日开始数,一周中的第几天(0…6)
    %W从星期一开始数,一年中的第几周(00…53)
    %x当地日期,例如2018年12月18日
    %X当地时间,例如16时16分17秒
    %y年份的后两位数(00…99)
    %Y年份
    %z时区,+hhmm,例如东八区+0800
    %: z(不能有空格,因为会转义为笑脸才有)时区,+hh::mm,例如东八区+08:00
    %:: z时区,+hh::mm:ss,例如东八区+08:00:00
    %Z时区的缩写,例如东八区CST
  • 12
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在微信小程序中,可以使用以下方法获取时间: 引用\[2\]中提到的方法是通过util.js文件中的函数来获取时间。你需要在util.js文件中定义一个函数,例如util.js_date_time,然后在需要获取时间的地方调用这个函数,并传入要转化的时间戳和时间格式作为参数。这样就可以得到所需的时间戳。 另外,引用\[3\]中提到的方法是通过将日期字符串转换为特定格式,然后使用new Date()函数来获取时间。在小程序环境中,需要将日期字符串中的点号替换为斜杠,然后使用new Date()函数来获取时间。 以下是一个示例代码,展示了如何在微信小程序中获取时间: ```javascript // 引入util.js文件 var util = require('../../utils/util.js'); // 使用util.js中的函数获取时间 var time = util.js_date_time('要转化的时间戳', 'Y/M/D h:m:s'); // 或者使用替换点号的方法获取时间 var dateStr = '2023.01.12 10:00'.split(".").join("/"); var timestamp = new Date(dateStr).valueOf(); ``` 请注意,以上代码中的'要转化的时间戳'和'日期'需要替换为实际的时间戳和日期。同时,你需要根据自己的实际情况来定义util.js文件中的函数和路径。 希望以上信息对你有所帮助! #### 引用[.reference_title] - *1* [微信小程序获取当前时间戳、日期、时间](https://blog.csdn.net/weixin_45897706/article/details/124281580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [微信小程序--时间戳使用](https://blog.csdn.net/Yuan_mingyu/article/details/98516823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [微信小程序获取指定时间时间戳 时间undefined/Invalid date](https://blog.csdn.net/weixin_49230250/article/details/128645223)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值