linux bash – 以自定义格式解析日期

发布时间:2020-07-01 整理:编程之家
编程之家收集整理的这篇文章主要介绍了linux bash – 以自定义格式解析日期编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!
我有一个%c格式的日期(可能是任何其他),我需要在date命令中使用它. %c不是美国格式.它是德国人,因为它是德国服务器.这在美国服务器上也无法正常工作. (区域设置为德语或美语)

这不起作用(包括错误):

user@server:~$NOW=$(date +%c); echo $NOW
Do 19 Dez 2013 22:33:28 CET
user@server:~$date --date="$NOW" +%d/%m/%Y
date: ungültiges Datum „Do 19 Dez 2013 22:33:28 CET“

(日期:ungültigesGeatum“Do 19 Dez 2013 22:33:28 CET”=日期:无效日期“Do 19 Dez 2013 22:33:28 CET”)

困难在于我不知道以后会使用哪种语言环境甚至whci dateformat,因为用户可以设置自己的格式.所以一个简单的特定解析解决方案真的不会起作用!

但是我该怎么办呢?

为了推广这个问题:

如果我有一个日期格式format1(可以是任何或至少可以反转的格式)我可以使用日期来获取格式化日期.但是如果我想将它格式化为另一个日期(format2)我该怎么做呢?
使用除coreutils以外的任何其他解决方案是没有意义的,因为我正在尝试为尽可能多的unix机器开发一个bash脚本.

DATE=$(date "+$format1")

date --date="$DATE" "+$format2" # Error in most cases!

这是必需的,因为我有一个用户可以给出日期格式的命令.将显示此日期字符串.但在后面的步骤中,我需要将此日期字符串转换为另一个固定字符串.我可以操作命令将获得的whcih格式,我可以操作输出(或用户将看到的内容).
我无法运行该命令两次,因为它非常耗时.

更新:

我找到了类似解决方案的东西:

# Modify $user_format so it can be parsed later
user_format="$user_format %s"

# Time consuming command which will print a date in the given format
output=$(time_consuming_command params "$user_format" more params)

# This will only display what $user_format used to be
echo ${output% *}

# A simple unix timestamp parsing ("${output##* }" will only return the timestamp)
new_formated_date=$(date -d "1970-01-01 ${output##* } sec UTC" "+$new_format")

这是有效的,可能对其他人有帮助.所以我会和你分享这个.

解决方法

为什么不将时间存储为unixtime(即自1970年1月1日以来的毫秒数),如1388198714?

尝试解析来自世界各地的所有日期格式作为一次性bash脚本而没有合理依赖的请求练习有点荒谬.

总结

以上是编程之家为你收集整理的linux bash – 以自定义格式解析日期全部内容,希望文章能够帮你解决linux bash – 以自定义格式解析日期所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!