hive sql shell日期编写总结

本文详细介绍了在Linux环境下如何使用date命令进行日期时间的查询、校准及计算,包括获取当前日期时间、昨日、上个月、下个月的日期,以及如何判断一周前的日期等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#当前日期
$ date +%F
[root@kafka02 kafka]# date +%F
2019-08-12

#当前时间
$ date +"%F %H:%M:%S"
[root@kafka02 kafka]# date +"%F %H:%M:%S"
2019-08-12 12:23:20

#昨日
$ date -d yesterday +%F

#上一个月
$ date -d “KaTeX parse error: Expected 'EOF', got '#' at position 54: …@kafka02 kafka]#̲ date -d "(date +%Y%m)01 last month” +%Y%m
201907

#当月
$ date +%Y-%m
[root@kafka02 kafka]# date +%Y%m
201908

#下一个月
$ date -d “KaTeX parse error: Expected 'EOF', got '#' at position 54: …@kafka02 kafka]#̲ date -d "(date +%Y%m)01 next month” +%Y%m
201909

校准时间:
$ yum -y install ntp
$ ntpdate ntp.api.bz
$ date

求当前日期的是多少
[root@kafka02 kafka]# date -d “$1” +%Y-%m-%d
2019-08-12
[root@kafka02 kafka]# n_date=date -d "$1" +%Y-%m-%d
[root@kafka02 kafka]# echo $n_date
2019-08-12

求当前日期的明天

[root@kafka02 kafka]# date -d “${n_date} tomorrow” +%Y-%m-%d
2019-08-13

求当前日期的明天是第几天

[root@kafka02 kafka]# date -d “KaTeX parse error: Expected 'EOF', got '#' at position 47: …@kafka02 kafka]#̲ date -d "1 day…{n_date}” +%d`
[root@kafka02 kafka]# echo $t_d
12

求当前日期是星期几

[root@kafka02 kafka]# date -d “${n_date}” +%w
1
[root@kafka02 kafka]# date -d 20190812 +%w
1
[root@kafka02 kafka]# date -d “20190812” +%w
1
[root@kafka02 kafka]#

判断当前日期的前一周

[root@kafka02 kafka]# date -d “${n_date} 7 days ago” +%Y-%m-%d
2019-08-05

eg:

if [ $# -eq 1 ]; then                
     n_date=`date -d "$1" +%Y-%m-%d`
else
     n_date=`date -d "1 days ago" +%Y-%m-%d`                           #n_date=`date -d " -1 days" +%Y-%m-%d`
fi

eg:
#如果昨天是周一
#那么跑批的周报开始日期为上个周一
#如果昨天不是周一,周报的跑批开始日期是本周一

if [ ${n_week} -eq 1 ]; then              
	   n_week_start=`date -d "$t_date 7 days ago" +%Y-%m-%d` 
else 
     if [ ${n_week} -eq 0 ]; then
          n_week=7
     fi
     n_week_start=`date -d "$n_date  $((n_week -1)) days ago" +%Y-%m-%d`      
fi

[root@kafka02 kafka]# date -d “$n_date $((12-1)) days ago” +%Y-%m-%d
2019-08-01

eg:
#这里有要注意的地方是,周可以判断昨天(固定),好比通过昨天是周日判断今天是周一;而对月来说,昨天并不是一个固定值,28、30、31
#同理,如果今天是1号,月报跑批开始日期是上个月1号

if [ ${t_d} -eq 01 ]; then           
     n_month_start=`date -d "$n_date last-month" +%Y-%m-%d`
else
     n_month_start=`date -d "$n_date  $((t_d -1)) days ago" +%Y-%m-%d`   #否则月报跑批日期是本月1号,#n_month_start=`date -d "-2 days $t_date" +%Y-%m-%d`
fi

获取上个月最后一天的日期方法,历遍一个月的每一天的脚本


#!/bin/bash
## 本月的第一天,这样的写法,不管在那一天执行脚本都是保证是1号
nowdate=`date +%Y%m01`

## 上个月的第一天
startdate=`date -d"$nowdate last month" +%Y%m%d`

## 上个月的最后一天

enddate=`date -d"$nowdate last day" +%Y%m%d`

## 循环读写这个的每一天

while (( $startdate <= $enddate )) 
do
  echo $startdate 
  startdate=`date -d "+1 day $startdate" +%Y%m%d`
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值