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

 LUO程嘉嘉_625 发布于 2023-02-09 09:43

我有一个%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"= date: invalid date „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")

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

2 个回答
  • --date从GNU coreutils 8.22开始是不可能的.从日期手册:

    '-d datestr'

    '--date = datestr'

    显示在datestr中指定的日期和时间,而不是当前日期和时间.datestr几乎可以是任何常见格式.它可以包含月份名称,时区,"上午"和"下午","昨天"等.例如, - date ="2004-02-27 14:19:13.489392193 +0530"指定时间的瞬间2004年2月27日下午2:19:13在UTC以东5小时30分钟的时区之后是489,392,193纳秒.

    注意:输入当前必须采用与语言环境无关的格式.例如,需要LC_TIME = C以在许多语言环境中打印正确的日期:

    date -d "$(LC_TIME=C date)"
    

    http://www.gnu.org/software/coreutils/manual/html_node/Options-for-date.html#Options-for-date

    请注意,输入格式不能采用特定于语言环境的格式.

    可能有其他库或程序可以识别更多的日期格式,但对于给定的日期格式,编写一个简短的程序将其转换为日期识别的东西并不困难(例如,使用Perl或awk).

    2023-02-09 09:49 回答
  • 为什么不将时间存储为unixtime(即1970年1月1日以来的毫秒数)1388198714

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

    2023-02-09 09:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有