programing

날짜(현재 시간 하루 전)를 Bash로 가져옵니다.

goodjava 2023. 6. 4. 18:38

날짜(현재 시간 하루 전)를 Bash로 가져옵니다.

현재 시간보다 하루 전인 Bash의 날짜를 인쇄하려면 어떻게 해야 합니까?

만약 당신이 GNU 날짜를 가지고 있고 내가 당신을 올바르게 이해했다면요.

$ date +%Y:%m:%d -d "yesterday"
2009:11:09

또는

$ date +%Y:%m:%d -d "1 day ago"
2009:11:09

BSD(OSX)가 있는 경우date다음과 같이 할 수 있습니다.

date -j -v-1d
Wed Dec 14 15:34:14 CET 2011

또는 임의의 날짜에 날짜 계산을 수행하려는 경우:

date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
date --date='-1 day'

MAC OSX

어제 날짜:

date -v-1d +%F

여기서 1d는 현재 날짜에서 1일을 뺀 값을 정의합니다.유사하게,

날짜 -v-1w +%F - 이전 주 날짜

날짜 -v-1m +%F - 전월 날짜

GNU 날짜가 있다면,

date --date="1 day ago"

더 많은 정보: https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html

Solaris 시스템에서 I를 언급하지 않아서 죄송합니다.따라서 -date 스위치는 Solaris bash에서 사용할 수 없습니다.

저는 시간대에 대한 트릭이 거의 없이 이전 날짜를 얻을 수 있다는 것을 알게 되었습니다.

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE

글쎄요, 이것은 늦은 답변이지만, 이것은 효과가 있는 것 같습니다!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;

고급 Bash 스크립팅 가이드

date +%Y:%m:%d -d "yesterday"

날짜 형식에 대한 자세한 내용은 날짜에 대한 관리 페이지를 참조하십시오.

date --date='-1 day'
date -d "yesterday" '+%Y-%m-%d'

또는

date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date

대신 Perl을 사용하시겠습니까?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

또는 nawk를 사용하고 (ab) /usr/bin/adb를 사용합니다.

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

이것도 우연히 발견했어요...미친!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb

date --date='-1 day'

그다지 섹시하지는 않지만, 그 일을 해낼 수 있습니다.

perl -e 'my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 86400);$year += 1900; $mon+= 1; printf ("YESTERDAY: %04d%02d%02d \n", $year, $mon, $mday)'

"마틴 클레이튼" 답변에서 형성됩니다.

선택한 날짜 형식이 'YYYYMM'인 경우 정규식을 사용하여 간단한 계산을 수행할 수 있습니다.

echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'

2020년 1월에 201912;-)를 반환할 예정이지만, 날짜에 계산 옵션과 다른 날짜 인터프리터 옵션(예: 펄 사용)을 사용할 수 없는 경우에는 해결책일 뿐입니다;-)

단답형(GNU 형식):

date +%Y-%m-%d -d "-2 day"

OSX를 사용하고 있지만 GNU 호환을 위한 생성이 필요한 경우 먼저 coreutils를 설치합니다.

brew install coreutils

그런 다음 다음을 사용하여 프로필을 편집합니다.

#gnu coreutils first
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

터미널을 다시 시작하면 GNU 형식을 사용할 수 있습니다!

yesterday=`date -d "-1 day" %F`

YYY-MM-DD 형식의 어제 날짜를 변수에 넣습니다.$yesterday.

#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day

DST 인식 솔루션:

시간대를 조작하면 몇 시간 동안 시계를 변경할 수 있습니다.일광 절약 시간으로 인해 24시간 전은 오늘 또는 그저께가 될 수 있습니다.

당신은 어제가 20시간이나 30시간 전이라고 확신합니다.어느 것이요?음, 가장 최근의 것은 오늘이 아닙니다.

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

echo 명령에 사용되는 -e 매개 변수는 bash에 필요하지만 ksh에서는 작동하지 않습니다.ksh에서 -e 플래그 없이 동일한 명령을 사용할 수 있습니다.

스크립트가 다른 환경에서 사용될 경우 #!/bin/ksh 또는 #!/bin/bash로 스크립트를 시작할 수 있습니다.\n을 새 줄로 바꿀 수도 있습니다.

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

DST 부분도 처리하는 아래 코드를 사용해 보십시오.

if [ $(date +%w) -eq $(date -u +%w) ]; then
  tz=$(( 10#$gmthour - 10#$localhour ))
else
  tz=$(( 24 - 10#$gmthour + 10#$localhour ))
fi
echo $tz
myTime=`TZ=GMT+$tz date +'%Y%m%d'`

코트시 앤스가 위처스

date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9

언급URL : https://stackoverflow.com/questions/1706882/get-the-date-a-day-before-current-time-in-bash