如果条件较旧,纪元日期

Posted

技术标签:

【中文标题】如果条件较旧,纪元日期【英文标题】:if condition older with epoch date 【发布时间】:2021-08-29 20:36:49 【问题描述】:

我正在创建一个条件,以纪元格式检查实际日期并以纪元格式比较另一个字符串;如果字符串超过 10 天,请执行一些操作...

我尝试过这样的事情:

#!/bin/bash

timeago='10 days ago'
actual_date=$(date --date "now" +'%s')
last_seen_filter=$(date --date "$timeago" +'%s')
    
echo "INFO: actual_date=$actual_date, last_seen_filter=$last_seen_filter" >&2
    
if [ "$actual_date" -lt "$last_seen_filter" ]; then
        echo "something"
       else
        echo "do something"
fi

#!/bin/bash
cutoff=$(date -d '10 days ago' +%s)
key="1624684050 1624688000"
while read -r "$key" 
do
  age=$(date -d "now" +%s)
  if (($age < $cutoff))
  then
    printf "Warning! key %s is older than 10 days\n" "$key" >&2
  fi
done < input

这还不够我需要,我在一个名为 converted_data 的文件中有纪元日期,我需要在 if 比较中包含这个字符串。

1624684050
1634015250
1614661650
1622005650

【问题讨论】:

你有非常奇怪的间距错误,也许在寻求人工帮助之前尝试shellcheck.net。 但是您的实际问题是什么?这些数字与您的代码有何关系? (而且还有多个间距错误。) 真的需要比较 10 个日历日(您需要检查语言环境、时区、闰日、闰秒、夏令时等)还是10 * 24 * 60 * 60 seconds 的比较够好吗? @EdMorton 我正在尝试创建一个语言环境检查,如何将字符串中的纪元日期计算为实际日期,类似这样,如果纪元日期比实际日期更早(10 天),我的疑问是如何计算纪元日期,任何材料都可以帮助我! 好的,然后edit 你的问题是a)修复你发布的代码中的问题(复制/粘贴到@tripleee 建议的shellcheck.net,它会告诉你错误) b) 包含一个minimal reproducible example,其中包含简洁、可测试的样本输入和预期输出,以便我们为您提供帮助 【参考方案1】:

目前尚不清楚您要做什么,但也许使用 GNU awk 可以帮助您入门:

$ awk '
    BEGIN  today=strftime("%F") 
    
        secs = $0
        days = 0
        date = strftime("%F",secs)
        while ( strftime("%F",secs+=(24*60*60)) < today ) 
            ++days
        
        print $0":", date, "->", today, "=", days
    
' file
1624684050: 2021-06-26 -> 2021-06-13 = 0
1634015250: 2021-10-12 -> 2021-06-13 = 0
1614661650: 2021-03-01 -> 2021-06-13 = 102
1622005650: 2021-05-26 -> 2021-06-13 = 17

未来日期的 0s 是因为您只询问过去 10 天的日期,所以我不在乎适应过去和未来的增量。我也没有考虑太多,所以检查逻辑和数学!

【讨论】:

哇,这对我帮助很大,你就是那个人!谢谢楼主!

以上是关于如果条件较旧,纪元日期的主要内容,如果未能解决你的问题,请参考以下文章

有条件地使用 coder.extrinsics

电源查询:如果满足条件,则查找最小日期

将纪元转换为时间戳时获取不正确的日期

根据日期和其他条件突出显示单元格

将纪元时间转换为日期字符串

Date() 按条件打印当前日期的月份和周