如何从 Bash 脚本中用户提供的日期和时间中减去 3 小时?

问题描述 投票:0回答:1

我正在编写一个 Bash 脚本,我需要从用户提供的开始和结束日期/时间输入中减去 3 小时。用户以 DD/MM/YYYY HH:MM:SS 的 24 小时格式输入日期和时间。

#user will enter 24hours format
Select_Start_date="01/10/2024 12:55:23"
Select_End_date="01/10/2024 16:54:23"

# Convert to the correct format (YYYY-MM-DD HH:MM:SS) before subtracting hours
S_date_adj=$(date -d "$(echo $Select_Start_date | awk -F'/' '{print $3"-"$2"-"$1" "$4}')" -d "3 hours ago" +"%d/%m/%Y %H:%M:%S")
E_date_adj=$(date -d "$(echo $Select_End_date | awk -F'/' '{print $3"-"$2"-"$1" "$4}')" -d "3 hours ago" +"%d/%m/%Y %H:%M:%S")

echo "Actual start date: $Select_Start_date"
echo "Actual End date : $Select_End_date"
echo "Reducted 3 hours start date:$S_date_adj"
echo "Reducted 3 houes End  date :$E_date_adj"
    
    # Pipeline Query
    SELECT ord.order_num FROM database.s_order ord,
         database.S_ORDER_DTL dtl
    WHERE ord.created >= TO_DATE('$S_date_adj', 'dd/mm/yyyy hh24:mi:ss')
      AND ord.last_upd <= TO_DATE('$E_date_adj', 'dd/mm/yyyy hh24:mi:ss')

我需要帮助确保日期减法正确设置为 24 小时格式并应用在 SQL 查询中。

我得到的结果:

实际开始日期:01/10/2024 12:55:23

实际结束日期:01/10/2024 16:54:23

减少3小时开始日期:03/10/2024 08:21:49 (假设12 -3 =9:55:23)

减少3小时结束日期:03/10/2024 08:21:49 (假设16-3 =14:54:23)

shell jenkins-pipeline
1个回答
0
投票

由于日期命令的语法,特别是它将日期格式与时间操作相结合的方式,您当前的脚本存在问题。您可以通过实施以下更改来修复它:

Select_Start_date="01/10/2024 12:55:23"
Select_End_date="01/10/2024 16:54:23"

S_date_adj=$(date -d "$(echo $Select_Start_date | awk -F'[ /:]' '{print $3"-"$2"-"$1" "$4":"$5":"$6}')" "-3 hours" +"%d/%m/%Y %H:%M:%S")
E_date_adj=$(date -d "$(echo $Select_End_date | awk -F'[ /:]' '{print $3"-"$2"-"$1" "$4":"$5":"$6}')" "-3 hours" +"%d/%m/%Y %H:%M:%S")

echo "Actual start date: $Select_Start_date"
echo "Actual end date: $Select_End_date"
echo "Reduced 3 hours start date: $S_date_adj"
echo "Reduced 3 hours end date: $E_date_adj"

SQL_QUERY="
SELECT ord.order_num FROM database.s_order ord,
       database.S_ORDER_DTL dtl
WHERE ord.created >= TO_DATE('$S_date_adj', 'dd/mm/yyyy hh24:mi:ss')
  AND ord.last_upd <= TO_DATE('$E_date_adj', 'dd/mm/yyyy hh24:mi:ss');
"

echo "SQL Query: $SQL_QUERY"

然后您应该能够在 SQL 查询中使用正确的缩短日期。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.