首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash中的日期比较

Bash中的日期比较
EN

Stack Overflow用户
提问于 2014-12-12 02:12:49
回答 2查看 45.1K关注 0票数 11

我需要使用Bash比较两个日期/时间。

输入格式: 2014-12-01T21:34:03+02:00

我想将此格式转换为int,然后比较两个日期的int

或者bash是否有其他方法来比较两个日期?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-12 02:14:14

您可以通过以下方式比较lexicographicallyconditional construct [[ ]]

代码语言:javascript
运行
复制
[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]

来自该男子的:

[表达式]

根据条件表达式的计算结果返回状态0或1。

新的更新:

如果您需要比较不同时区的时间,您可以首先通过以下方式转换这些时间:

代码语言:javascript
运行
复制
get_date() {
    date --utc --date="$1" +"%Y-%m-%d %H:%M:%S"
}

$ get_date "2014-12-01T14:00:00+00:00"
2014-12-01 14:00:00

$ get_date "2014-12-01T12:00:00-05:00"
2014-12-01 17:00:00

$ [[ $(get_date "2014-12-01T14:00:00+00:00") < $(get_date "2014-12-01T12:00:00-05:00") ]] && echo it works
it works
票数 26
EN

Stack Overflow用户

发布于 2014-12-12 02:20:20

一种选择是将日期转换为自UNIX纪元以来的秒数:

代码语言:javascript
运行
复制
date -d "2014-12-01T21:34:03+02:00" +%s

然后,您可以将此整数与以相同方式处理的另一个日期进行比较:

代码语言:javascript
运行
复制
(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))

当我们比较两个数字时,(( ))语法用于创建算术上下文。如果考虑到可移植性,也可以使用更通用的[ ${x} -lt ${y} ]样式语法。

这样做的一个优点是date可以理解各种格式,例如

date -d "next year" +%s。此外,date了解时区,因此它可以正确地处理不同时区的日期对之间的比较。

但是,如果这两个问题都与您无关,那么我会选择j.a.'s solution

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27429653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档