두 날짜 사이의 날짜 차이를 찾는 방법은 무엇입니까?
A = "2002-20-10"
B = "2003-22-11"
두 날짜 사이의 날짜 차이를 찾는 방법은 무엇입니까?
GNU date
가있는 경우 임의의 날짜 표시 ( -d
옵션) 를 인쇄 할 수 있습니다 . 이 경우 EPOCH 이후 날짜를 초로 변환하고 빼고 24 * 3600으로 나눕니다.
아니면 휴대용 방법이 필요하십니까?
bash 방식-날짜를 % y % m % d 형식으로 변환 한 다음 명령 줄에서 직접 수행 할 수 있습니다.
echo $(( ($(date --date="031122" +%s) - $(date --date="021020" +%s) )/(60*60*24) ))
그리고 파이썬에서
$python -c "from datetime import date; print (date(2003,11,22)-date(2002,10,20)).days"
398
조심해! 여기에있는 많은 bash 솔루션은 일광 절약 시간이 시작되는 날짜 (해당되는 경우)에 걸쳐있는 날짜 범위에 대해 손상되었습니다. 이는 $ ((math)) 구문이 결과 값에 대해 '바닥'/ 잘림 연산을 수행하여 정수만 반환하기 때문입니다. 설명하겠습니다.
DST는 올해 미국에서 3 월 8 일에 시작되었으므로 다음과 같은 기간을 사용하겠습니다.
start_ts=$(date -d "2015-03-05" '+%s')
end_ts=$(date -d "2015-03-11" '+%s')
이중 괄호로 무엇을 얻었는지 봅시다 :
echo $(( ( end_ts - start_ts )/(60*60*24) ))
'5'를 반환합니다.
'bc'를 더 정확하게 사용하면 다른 결과를 얻을 수 있습니다.
echo "scale=2; ( $end_ts - $start_ts )/(60*60*24)" | bc
'5.95'를 반환합니다. 누락 된 0.05는 DST 전환으로 인한 손실 시간입니다.
그렇다면 이것이 어떻게 올바르게 수행되어야합니까?
대신 이것을 사용하는 것이 좋습니다.
printf "%.0f" $(echo "scale=2; ( $end_ts - $start_ts )/(60*60*24)" | bc)
여기서 'printf'는 'bc'로 계산 된 더 정확한 결과를 반올림하여 정확한 날짜 범위 '6'을 제공합니다.
편집 : 최근에 사용하고있는 @ hank-schultz의 의견에서 답변을 강조 표시합니다.
date_diff=$(( ($(date -d "2015-03-11 UTC" +%s) - $(date -d "2015-03-05 UTC" +%s) )/(60*60*24) ))
윤초는 차이에 더해지기 때문에 항상 나중 날짜에서 이전 날짜를 빼는 한 윤초는 안전해야합니다. 잘림은 올바른 결과로 효과적으로 반올림됩니다.
편의를 위해 MAC OS X 버전이 있습니다.
$ A="2002-20-10"; B="2003-22-11";
$ echo $(((`date -jf %Y-%d-%m $B +%s` - `date -jf %Y-%d-%m $A +%s`)/86400))
nJoy!
-d 옵션이 시스템에서 작동하는 경우 다른 방법이 있습니다. 1 년 365 일을 고려했기 때문에 윤년을 고려하지 않을 것이라는 경고가 있습니다.
date1yrs=`date -d "20100209" +%Y`
date1days=`date -d "20100209" +%j`
date2yrs=`date +%Y`
date2days=`date +%j`
diffyr=`expr $date2yrs - $date1yrs`
diffyr2days=`expr $diffyr \* 365`
diffdays=`expr $date2days - $date1days`
echo `expr $diffyr2days + $diffdays`
GNU 날짜가 없더라도 Perl이 설치되어있을 것입니다.
use Time::Local;
sub to_epoch {
my ($t) = @_;
my ($y, $d, $m) = ($t =~ /(\d{4})-(\d{2})-(\d{2})/);
return timelocal(0, 0, 0, $d+0, $m-1, $y-1900);
}
sub diff_days {
my ($t1, $t2) = @_;
return (abs(to_epoch($t2) - to_epoch($t1))) / 86400;
}
print diff_days("2002-20-10", "2003-22-11"), "\n";
398.041666666667
일광 절약으로 인해 398 일 1 시간 이 반환 됩니다.
내 피드에 질문이 다시 올라 왔습니다. 다음은 Perl 번들 모듈을 사용하는보다 간결한 방법입니다.
days=$(perl -MDateTime -le '
sub parse_date {
@f = split /-/, shift;
return DateTime->new(year=>$f[0], month=>$f[2], day=>$f[1]);
}
print parse_date(shift)->delta_days(parse_date(shift))->in_units("days");
' $A $B)
echo $days # => 398
이것은 나를 위해 작동합니다.
A="2002-10-20"
B="2003-11-22"
echo $(( ($(date -d $B +%s) - $(date -d $A +%s)) / 86400 )) days
인쇄물
398 days
무슨 일이야?
- A 와 B 에 유효한 시간 문자열을 제공하십시오.
- Use
date -d
to handle time strings - Use
date %s
to convert time strings to seconds since 1970 (unix epoche) - Use bash parameter expansion to subtract seconds
- divide by seconds per day (86400=60*60*24) to get difference as days
- ! DST is not taken into account ! See this answer at unix.stackexchange!
I'd submit another possible solution in Ruby. Looks like it's the be smallest and cleanest looking one so far:
A=2003-12-11
B=2002-10-10
DIFF=$(ruby -rdate -e "puts Date.parse('$A') - Date.parse('$B')")
echo $DIFF
Use the shell functions from http://cfajohnson.com/shell/ssr/ssr-scripts.tar.gz; they work in any standard Unix shell.
date1=2012-09-22
date2=2013-01-31
. date-funcs-sh
_date2julian "$date1"
jd1=$_DATE2JULIAN
_date2julian "$date2"
echo $(( _DATE2JULIAN - jd1 ))
See the documentation at http://cfajohnson.com/shell/ssr/08-The-Dating-Game.shtml
on unix you should have GNU dates installed. you do not need to deviate from bash. here is the strung out solution considering days, just to show the steps. it can be simplified and extended to full dates.
DATE=$(echo `date`)
DATENOW=$(echo `date -d "$DATE" +%j`)
DATECOMING=$(echo `date -d "20131220" +%j`)
THEDAY=$(echo `expr $DATECOMING - $DATENOW`)
echo $THEDAY
This is the simplest i managed to get working on centos 7:
OLDDATE="2018-12-31"
TODAY=$(date -d $(date +%Y-%m-%d) '+%s')
LINUXDATE=$(date -d "$OLDDATE" '+%s')
DIFFDAYS=$(( ($TODAY - $LINUXDATE) / (60*60*24) ))
echo $DIFFDAYS
Give this a try:
perl -e 'use Date::Calc qw(Delta_Days); printf "%d\n", Delta_Days(2002,10,20,2003,11,22);'
Another Python version:
python -c "from datetime import date; print date(2003, 11, 22).toordinal() - date(2002, 10, 20).toordinal()"
Assume we rsync Oracle DB backups to a tertiary disk manually. Then we want to delete old backups on that disk. So here is a small bash script:
#!/bin/sh
for backup_dir in {'/backup/cmsprd/local/backupset','/backup/cmsprd/local/autobackup','/backup/cfprd/backupset','/backup/cfprd/autobackup'}
do
for f in `find $backup_dir -type d -regex '.*_.*_.*' -printf "%f\n"`
do
f2=`echo $f | sed -e 's/_//g'`
days=$(((`date "+%s"` - `date -d "${f2}" "+%s"`)/86400))
if [ $days -gt 30 ]; then
rm -rf $backup_dir/$f
fi
done
done
Modify the dirs and retention period ("30 days") to suit your needs.
Using mysql command
$ echo "select datediff('2013-06-20 18:12:54+08:00', '2013-05-30 18:12:54+08:00');" | mysql -N
Result: 21
NOTE: Only the date parts of the values are used in the calculation
Reference: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_datediff
This assumes that a month is 1/12 of a year:
#!/usr/bin/awk -f
function mktm(datespec) {
split(datespec, q, "-")
return q[1] * 365.25 + q[3] * 365.25 / 12 + q[2]
}
BEGIN {
printf "%d\n", mktm(ARGV[2]) - mktm(ARGV[1])
}
For MacOS sierra (maybe from Mac OS X yosemate),
To get epoch time(Seconds from 1970) from a file, and save it to a var: old_dt=`date -j -r YOUR_FILE "+%s"`
To get epoch time of current time new_dt=`date -j "+%s"`
To calculate difference of above two epoch time (( diff = new_dt - old_dt ))
To check if diff is more than 23 days (( new_dt - old_dt > (23*86400) )) && echo Is more than 23 days
참고URL : https://stackoverflow.com/questions/4946785/how-to-find-the-difference-in-days-between-two-dates
'IT Share you' 카테고리의 다른 글
JSP / 서블릿 웹 애플리케이션에서 XSS 방지 (0) | 2020.11.10 |
---|---|
교리 2 : 쿼리 작성기로 쿼리 업데이트 (0) | 2020.11.10 |
@Test 후 트랜잭션 롤백 (0) | 2020.11.10 |
미래가있는 Scala의 비동기 IO (0) | 2020.11.10 |
CocoaPods의 의견? (0) | 2020.11.10 |