날짜 시간 문자열을 Bash에서 에폭으로 변환
날짜 시간 문자열의 형식은 06/12/2012 07:21:22 입니다.UNIX 타임스탬프 또는 에폭으로 변환하려면 어떻게 해야 합니까?
이 찾고 있는 것은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.date --date='06/12/2012 07:21:22' +"%s"GNU 사용하고 것을 로 하고 GNU coreutils입니다.--date 및%sformat string gnu GNU の GNU 장니 pos 。되어 있지 에, 준거 에서도 이러한 할 수 있는 .POSIX는 어느 쪽도 규정하지 않기 때문에 POSIX 준거 시스템에서도 이러한 변환을 할 수 있는 휴대용 방법은 없습니다.
의 「Da't Knowledge」에 대해서는, 해 주세요.date.
bash 의 : bash--date ★★★★★★★★★★★★★★★★★」-d를 미국 형식 ISO8601 형식)으로합니다.mm/dd/yyyy ★★★★★★★★★★★★★★★★★」yyyy-mm-dd 또는
Linux의 경우 다음 명령을 실행합니다.
date -d '06/12/2012 07:21:22' +"%s"
macOS의 경우 다음 명령을 실행합니다.
date -jf "%Y-%m-%d %H:%M:%S" "1970-01-01 00:00:00" +%s
이러한 답변의 대부분은 지나치게 복잡하고 변수 사용법도 누락되어 있습니다.표준 Linux 시스템에서는 다음과 같이 간단하게 실행할 수 있습니다(앞에서 설명한 바와 같이 Mac 사용자용으로 date 명령어를 조정해야 합니다).
샘플 스크립트:
#!/bin/bash
orig="Apr 28 07:50:01"
epoch=$(date -d "${orig}" +"%s")
epoch_to_date=$(date -d @$epoch +%Y%m%d_%H%M%S)
echo "RESULTS:"
echo "original = $orig"
echo "epoch conv = $epoch"
echo "epoch to human readable time stamp = $epoch_to_date"
결과:
RESULTS:
original = Apr 28 07:50:01
epoch conv = 1524916201
epoch to human readable time stamp = 20180428_075001
또는 함수로서:
# -- Converts from human to epoch or epoch to human, specifically "Apr 28 07:50:01" human.
# typeset now=$(date +"%s")
# typeset now_human_date=$(convert_cron_time "human" "$now")
function convert_cron_time() {
case "${1,,}" in
epoch)
# human to epoch (eg. "Apr 28 07:50:01" to 1524916201)
echo $(date -d "${2}" +"%s")
;;
human)
# epoch to human (eg. 1524916201 to "Apr 28 07:50:01")
echo $(date -d "@${2}" +"%b %d %H:%M:%S")
;;
esac
}
어떤 시간대를 사용하고 싶은지 확인하세요.
datetime="06/12/2012 07:21:22"
가장 일반적인 용도에는 기계 표준 시간대가 사용됩니다.
date -d "$datetime" +"%s" #depends on local timezone, my output = "1339456882"
, UTC ", UTC datetime", "UTC datetime", "UTC datetime", "UTC datetime", "UTC datetime", "UTC datetime", "UTC datetime"을 .-u flag에서 합니다. 그렇지 않으면 로컬 표준 시간대에서 변환합니다.
date -u -d "$datetime" +"%s" #general output = "1339485682"
날짜 시간 문자열을 bash의 에폭으로 효율적으로 변환하는 방법
불필요한 반복적인 포크를 피하고, 이 번역을 보다 빠르게 하기 위해...
1개의 포크를 실행할 수 .date -f - +%s…
도입부
공통 구문:
epochDate=$(date -d "$InputDate" +%s)
정상적으로 동작하지만 반복 실행 시 무거워집니다!
이 투고에서는,
- 간단한 데모를 보여드리고,
- 몇 가지 설명,
- a 많은 Un*x 툴에 사용할 수 있는 기능 (
bc,rot13,sed
퀵 데모
fifo=$HOME/.fifoDate-$$
mkfifo $fifo
exec 5> >(exec stdbuf -o0 date -f - +%s >$fifo 2>&1)
echo now 1>&5
exec 6< $fifo
rm $fifo
read -t 1 -u 6 now
echo $now
이것은 현재의 UNIXTIME을 출력해야 합니다.그것으로부터, 비교하실 수 있습니다.
time for i in {1..5000};do echo >&5 "now" ; read -t 1 -u6 ans;done
real 0m0.298s
user 0m0.132s
sys 0m0.096s
또, 다음과 같이 합니다.
time for i in {1..5000};do ans=$(date +%s -d "now");done
real 0m6.826s
user 0m0.256s
sys 0m1.364s
6초 이상에서 0.5초 미만으로!!(호스트에게)
됩니다.echo $ans , 치환하다"now"타타에 "2019-25-12 20:10:00"★★★★★★★★★★…
날짜의 요건이 종료된 후 옵션에서 다음을 수행할 수 있습니다.
exec 5>&- ; exec 6<&-
오리지널 투고(상세설명)
변환할 날짜별로 1포크를 실행하는 대신 실행date어느쪽인가 하면, 어느쪽이냐면요.
date -f - +%s <<eof
Apr 17 2014
May 21 2012
Mar 8 00:07
Feb 11 00:09
eof
1397685600
1337551200
1520464020
1518304140
샘플:
start1=$(LANG=C ps ho lstart 1)
start2=$(LANG=C ps ho lstart $$)
dirchg=$(LANG=C date -r .)
read -p "A date: " userdate
{ read start1 ; read start2 ; read dirchg ; read userdate ;} < <(
date -f - +%s <<<"$start1"$'\n'"$start2"$'\n'"$dirchg"$'\n'"$userdate" )
자, 이제 살펴봅시다.
declare -p start1 start2 dirchg userdate
(답변은 다음과 같습니다.
declare -- start1="1518549549" declare -- start2="1520183716" declare -- dirchg="1520601919" declare -- userdate="1397685600"
한 번의 실행으로 이루어졌어요!
장시간 실행 하위 프로세스 사용
딱 한 가지 정보만 있으면 돼
mkfifo /tmp/myDateFifo
exec 7> >(exec stdbuf -o0 /bin/date -f - +%s >/tmp/myDateFifo)
exec 8</tmp/myDateFifo
rm /tmp/myDateFifo
(주의: 프로세스가 실행되고 모든 디스크립터가 열리기 때문에 fifo의 파일 시스템 엔트리를 안전하게 삭제할 수 있습니다.)
그럼 지금:
LANG=C ps ho lstart 1 $$ >&7
read -u 8 start1
read -u 8 start2
LANG=C date -r . >&7
read -u 8 dirchg
read -p "Some date: " userdate
echo >&7 $userdate
read -u 8 userdate
약간의 기능을 할 수 있습니다.
mydate() {
local var=$1;
shift;
echo >&7 $@
read -u 8 $var
}
mydate start1 $(LANG=C ps ho lstart 1)
echo $start1
또는 나의 것을 사용한다. newConnector기능.
연결 기능 포함, 및 ...
GitHub 또는 내 사이트에서 다운로드 또는 표시로 다른 버전을 찾을 수 있습니다.
wget https://raw.githubusercontent.com/F-Hauri/Connector-bash/master/shell_connector.bash
. shell_connector.bash
newConnector /bin/date '-f - +%s' @0 0
myDate "2018-1-1 12:00" test
echo $test
1514804400
주의: GitHub에서는 함수와 테스트가 분리되어 있습니다.사이트에서는, 이 스크립트가 소스가 아닌 경우, 간단하게 테스트를 실시합니다.
# Exit here if script is sourced
[ "$0" = "$BASH_SOURCE" ] || { true;return 0;}
get_curr_date () {
# get unix time
DATE=$(date +%s)
echo "DATE_CURR : "$DATE
}
conv_utime_hread () {
# convert unix time to human readable format
DATE_HREAD=$(date -d @$DATE +%Y%m%d_%H%M%S)
echo "DATE_HREAD : "$DATE_HREAD
}
언급URL : https://stackoverflow.com/questions/10990949/convert-date-time-string-to-epoch-in-bash
'programing' 카테고리의 다른 글
| Swift와 C++를 혼합할 수 있나요?Objective-C .mm 파일처럼 (0) | 2023.04.14 |
|---|---|
| xcode4의 프레임워크와 정적 라이브러리의 차이 및 호출 방법 (0) | 2023.04.14 |
| C#에서 범용 목록을 복제하려면 어떻게 해야 하나요? (0) | 2023.04.14 |
| makefile의 여러 줄 bash 명령어 (0) | 2023.04.14 |
| Linux는 DOS 일시 중지에 상당합니까? (0) | 2023.04.14 |