Dateutils는 대량의 재무 데이터를 처리할 때 발생하는 사용 사례에 중점을 두고 명령줄에서 날짜와 시간을 조작하는 데 사용되는 도구 모음입니다.
Dateutils는 주로 github에서 호스팅됩니다.
github 페이지: https://github.com/hroptatyr/dateutils
프로젝트 홈페이지: http://www.fresse.org/dateutils/
다운로드: https://bitbucket.org/hroptatyr/dateutils/downloads
다음은 dateutils가 수행할 수 있는 작업을 보여주는 간단한 예제 목록입니다. 전체 사양은 정보 및 매뉴얼 페이지를 참조하세요. 설치 지침은 INSTALL 파일을 참조하세요.
Dateutils 명령에는 date
접두사가 붙지만 직관상의 이유로 알려진 Unix 명령과 유사합니다. 유일한 예외는 동일한 이름의 libc 함수와 유사한 strptime
입니다.
strptime
C 함수의 명령줄 버전
dateadd
날짜 또는 시간에 기간 추가
dateconv
달력 간 날짜 또는 시간 변환
datediff
날짜 또는 시간 사이의 기간 계산
dategrep
입력 스트림의 Grep 날짜 또는 시간
dateround
날짜 또는 시간을 "더 완전한" 값으로 반올림합니다.
dateseq
날짜 또는 시간의 시퀀스 생성
datesort
시간순으로 정렬합니다.
datetest
날짜 또는 시간 비교
datezone
날짜/시간을 시간대로 일괄 변환
나는 첫인상을 얻기 위해 예를 들어 설명하는 모든 것을 좋아합니다. 그래서 여기 온다.
seq(1)을 모방하지만 입력이 정수가 아닌 날짜 영역에서 나오는 도구입니다. 일반적으로 스크립트는 다음과 같은 것을 사용합니다.
$ for i in $(seq 0 9); do date -d "2010-01-01 +${i} days" "+%F" done
이제 다음과 같이 단축할 수 있습니다.
$ dateseq 2010-01-01 2010-01-10
시작 날짜와 일 단위 간격으로 계산하는 대신 종료 날짜를 직접 제공할 수 있다는 추가 이점이 있습니다. 또한 특정 평일을 건너뛰는 것과 같이 위의 seq(1)/date(1) 접근 방식을 사용하여 구현할 PITA가 될 날짜별 기능을 제공합니다.
$ dateseq 2010-01-01 2010-01-10 --skip sat,sun => 2010-01-01 2010-01-04 2010-01-05 2010-01-06 2010-01-07 2010-01-08
dateseq는 시간에도 작동합니다.
$ dateseq 12:00:00 5m 12:17:00 => 12:00:00 12:05:00 12:10:00 12:15:00
또한 날짜-시간:
$ dateseq --compute-from-last 2012-01-02T12:00:00 5m 2012-01-02T12:17:00 => 2012-01-02T12:02:00 2012-01-02T12:07:00 2012-01-02T12:12:00 2012-01-02T12:17:00
서로 다른 달력 시스템 및/또는 시간대 간의 날짜를 변환하는 도구입니다. 다른 도구는 일반적으로 그레고리력 날짜를 중국 달력으로 변환하는 데 중점을 두는 반면, dconv는 금융 상황에서 필수적인 달력 시스템을 지원하는 것을 목표로 합니다.
(그레고리력) 날짜를 소위 ymcw 표현으로 변환하려면:
$ dateconv 2012-03-04 -f "%Y-%m-%c-%w" => 2012-03-01-00
그 반대의 경우도 마찬가지입니다.
$ dateconv 2012-03-01-Sun -i "%Y-%m-%c-%a" -f '%F' => 2012-03-04
여기서 ymcw 표현은 특정 연도의 월의 %c
-th %w
의미합니다. 예를 들어 5월 세 번째 목요일과 같이 날짜를 지정한 경우 유용합니다.
dateconv는 입력 스트림에서 날짜, 시간 또는 날짜-시간 발생을 즉시 변환하는 데에도 사용할 수 있습니다.
$ dateconv -S -i '%b/%d %Y at %I:%M %P' <<EOF Remember we meet on Mar/03 2012 at 02:30 pm EOF => Remember we meet on 2012-03-03T14:30:00
가장 눈에 띄게 시간대 간 변환은 다음과 같습니다.
$ dateconv --from-zone "America/Chicago" --zone "Asia/Tokyo" 2012-01-04T09:33:00 => 2012-01-05T00:33:00 $ dateconv --zone "America/Chicago" now -f "%d %b %Y %T" => 05 Apr 2012 11:11:57
셸에서 날짜 비교를 수행하는 도구로, test(1)
을 모델로 하지만 적절한 명령줄 옵션이 있습니다.
$ if datetest today --gt 2010-01-01; then echo "yes" fi => yes
셸에서 날짜 산술(날짜 계산)을 수행하는 도구입니다. 날짜와 기간 목록이 주어지면 새 날짜가 계산됩니다. 기간과 날짜 목록이 주어지면 새 날짜가 계산됩니다.
$ dateadd 2010-02-02 +4d => 2010-02-06 $ dateadd 2010-02-02 +1w => 2010-02-09 $ dateadd -1d <<EOF 2001-01-05 2001-01-01 EOF => 2001-01-04 2000-12-31
시간에 지속 시간 추가:
$ dateadd 12:05:00 +10m => 12:15:00
날짜-시간도 마찬가지입니다.
$ dateadd 2012-03-12T12:05:00 -1d4h => 2012-03-11T08:05:00
시스템의 zoneinfo 데이터베이스에서 지원하는 경우 윤초 조정 계산이 가능합니다. "실제" 초를 표시하려면 rs
단위를 사용하십시오.
$ dateadd '2012-06-30 23:59:30' +30rs => 2012-06-30T23:59:60
반대로:
$ dateadd '2012-06-30 23:59:30' +30s => 2012-07-01T00:00:00
두 개 이상의 날짜 간의 차이를 계산하는 도구입니다. 이것은 아빠와 다소 반대입니다. 출력은 첫 번째 날짜에 추가되면 두 번째 날짜를 제공하는 기간이 됩니다.
두 날짜 사이의 일수를 구합니다.
$ datediff 2001-02-08 2001-03-02 => 22
기간 형식은 -f
스위치를 통해 제어할 수 있습니다.
$ datediff 2001-02-08 2001-03-09 -f "%m month and %d day" => 1 month and 1 day
datediff는 타임스탬프도 입력으로 허용합니다.
$ datediff 2012-03-01T12:17:00 2012-03-02T14:00:00 => 92580s
-f
스위치는 올바른 작업을 수행합니다.
$ datediff 2012-03-01T12:17:00 2012-03-02T14:00:00 -f '%dd %Ss' => 1d 6180s
비교:
$ datediff 2012-03-01T12:17:00 2012-03-02T14:00:00 -f '%dd %Hh %Ss' => 1d 1h 2580s
시스템의 zoneinfo 데이터베이스에서 지원하는 경우 윤초 조정 계산을 수행할 수 있습니다. "실제" 초 단위로 경과 시간을 얻으려면 형식 지정자 %rS
사용하십시오.
datediff '2012-06-30 23:59:30' '2012-07-01 00:00:30' -f '%rS' => 61
입력 스트림에서 특정 기준과 일치하는 라인을 추출하여 라인 또는 일치 항목을 표시하는 도구입니다.
$ dategrep '<2012-03-01' <<EOF Feb 2012-02-28 Feb 2012-02-29 leap day Mar 2012-03-01 Mar 2012-03-02 EOF => Feb 2012-02-28 Feb 2012-02-29 leap day
날짜나 타임스탬프를 다음/이전 1월 또는 다음/이전 목요일과 같이 반복되는 시점으로 "반올림"하는 도구입니다.
이번 달의 1일로 반올림(역방향):
$ dateround '2011-08-22' -1 => 2011-08-01
현재 날짜(오늘은 2016-01-08)로부터 다음 월요일을 구합니다.
$ dateround today Mon => 2015-01-11
지난 9월로 돌아가서 월말로 돌아갑니다.
$ dateround today -- -Sep +31d => 2015-09-30
날짜 스트림을 다음 달 첫째 날로 엄격하게 반올림합니다.
$ dateround -S -n 1 <<EOF pay cable 2012-02-28 pay gas 2012-02-29 pay rent 2012-03-01 redeem loan 2012-03-02 EOF => pay cable 2012-03-01 pay gas 2012-03-01 pay rent 2012-04-01 redeem loan 2012-04-01
시계열을 다음 분(즉, 초 부분은 00)으로 반올림한 다음 다음 반 과거 시간으로 반올림합니다(ISO로 변환).
$ dateround -S 0s30m -i '%d/%m/%Y %T' -f '%F %T' <<EOF 06/03/2012 14:27:12 eventA 06/03/2012 14:29:59 eventA 06/03/2012 14:30:00 eventB 06/03/2012 14:30:01 eventB EOF => 2012-03-06 14:30:00 eventA 2012-03-06 14:30:00 eventA 2012-03-06 14:30:00 eventB 2012-03-06 15:30:00 eventB
또는 하루를 30분으로 나눈 경우 공동 클래스 표기법을 사용하여 반올림할 수 있습니다.
$ dateround -S /30m -i '%d/%m/%Y %T' -f '%F %T' <<EOF 06/03/2012 14:27:12 eventA 06/03/2012 14:29:59 eventA 06/03/2012 14:30:00 eventB 06/03/2012 14:30:01 eventB EOF => 2012-03-06 14:30:00 eventA 2012-03-06 14:30:00 eventA 2012-03-06 14:30:00 eventB 2012-03-06 15:00:00 eventB
이는 전체 시간(30분의 짝수 배수)이 가능한 반올림 대상이라는 점을 제외하면 이전 예와 거의 동일합니다.
파일의 줄을 시간순으로 가져오는 도구입니다.
현재 datesort
도구는 필드를 지원하는 sort(1)
에 의존합니다. 특히 -t
구분 기호를 선택하고 -k
특정 필드를 기준으로 정렬합니다.
$ datesort <<EOF 2009-06-03 caev="DVCA" secu="VOD" exch="XLON" xdte="2009-06-03" nett/GBX="5.2" 2011-11-16 caev="DVCA" secu="VOD" exch="XLON" xdte="2011-11-16" nett/GBX="3.05" 2013-11-20 caev="DVCA" secu="VOD" exch="XLON" xdte="2013-11-20" nett/GBX="3.53" 2012-06-06 caev="DVCA" secu="VOD" exch="XLON" xdte="2012-06-06" nett/GBX="6.47" 2013-06-12 caev="DVCA" secu="VOD" exch="XLON" xdte="2013-06-12" nett/GBX="6.92" 2010-11-17 caev="DVCA" secu="VOD" exch="XLON" xdte="2010-11-17" nett/GBX="2.85" EOF => 2009-06-03 caev="DVCA" secu="VOD" exch="XLON" xdte="2009-06-03" nett/GBX="5.2" 2010-11-17 caev="DVCA" secu="VOD" exch="XLON" xdte="2010-11-17" nett/GBX="2.85" 2011-11-16 caev="DVCA" secu="VOD" exch="XLON" xdte="2011-11-16" nett/GBX="3.05" 2012-06-06 caev="DVCA" secu="VOD" exch="XLON" xdte="2012-06-06" nett/GBX="6.47" 2013-06-12 caev="DVCA" secu="VOD" exch="XLON" xdte="2013-06-12" nett/GBX="6.92" 2013-11-20 caev="DVCA" secu="VOD" exch="XLON" xdte="2013-11-20" nett/GBX="3.53"
다양한 시간대의 날짜/시간 값을 빠르게 검사하는 도구입니다. 결과는 모든 시간대의 모든 날짜-시간 값을 표시하는 행렬입니다.
$ datezone Europe/Berlin Australia/Sydney now 2014-06-30T05:00:00 => 2014-01-30T17:37:13+01:00 Europe/Berlin 2014-01-31T03:37:13+11:00 Australia/Sydney 2014-06-30T07:00:00+02:00 Europe/Berlin 2014-06-30T15:00:00+10:00 Australia/Sydney
datezone
도구를 사용하여 특정 날짜/시간을 기준으로 다음 또는 이전 DST 전환을 얻을 수도 있습니다.
$ datezone --next Europe/Berlin Australia/Sydney 2013-02-19 => 2013-03-31T02:00:00+01:00 -> 2013-03-31T03:00:00+02:00 Europe/Berlin 2013-04-07T03:00:00+11:00 -> 2013-04-07T02:00:00+10:00 Australia/Sydney
여기서 왼쪽 타임스탬프는 현재 구역 오프셋을 나타내고 오른쪽은 전환 후 구역 오프셋을 나타냅니다. 날짜/시간은 전환이 일어나려는 정확한 순간을 나타냅니다.
본질적으로 datezone
이 더 나은 zdump(8)
입니다.
strptime(3)
의 유연성을 명령줄에 제공하는 도구입니다. (적어도 GNU) date(1)
출력 형식을 지원하지만 날짜 도메인에서 임의의 입력을 읽는 지원은 부족합니다. 특히 입력 형식이 사전에 구체적으로 알려져 있고 일치하는 날짜/시간만 읽어야 하는 경우에는 더욱 그렇습니다. 존경받는.
Mon, May-01/2000
과 같은 이상한 날짜를 읽는 strptime
도구를 사용하면
strptime -i "%a, %b-%d/%Y" "Mon, May-01/2000" => 2000-05-01
C에서 했던 것처럼요.
strptime
실제로 시스템 libc의 strptime 루틴을 사용하고 시스템의 strftime 루틴을 출력하는 데 사용됩니다. 따라서 입력 및 출력 수정자는 시스템마다 다릅니다.
휴대용 파서/프린터 조합의 경우 위에서 설명한 대로 dateconv
사용하십시오. 입력 및 출력 형식 지정자는 C 런타임과 독립적입니다.
특별한 순서 없이, 완전성을 주장하지 않고:
날짜expr: http://www.eskimo.com/~scs/src/#dateexpr
allanfalloon의 dateutils: https://github.com/alanfalloon/dateutils
네 http://yest.sourceforge.net/
pdd https://github.com/jarun/pdd
귀하의 목적에 가장 적합한 것을 사용하십시오. 혹시 내 마음에 드신다면 dateutils의 openhub 페이지에 투표해 주세요.