[완료]Perl로 두 날짜 사이의 주말과 주일 뺀 일하는 날들의값 구하기 + 공휴일 포함하기
글쓴이: lovethecorners / 작성시간: 목, 2009/09/17 - 1:35오전
두 날짜가운에 주말과 주일을 뺀 일들의 갯수를 구하려합니다. 예를 들어 2009, 9, 9 과 2009, 10, 9 사이의 business days들의 값만 구하려고 하는데요,
Perl의 Date::Calc을 이용할수있지만 주말과 주일 모두 포함합니다.
my @first = (2009,9,9); my @second = (2009,10,9); my $days = Delta_Days( @first, @second );
이러면 30을 얻을수는 있는데, 주말과 주일을 빼고 얻는 방법은 없을까요? Date::Manip를 이용하면 어떻하면 될수도 있을것 같은데... 잘 않되네요.
Forums:
공휴일은 신경쓰지 않고 단순히 토요일, 일요일만 제외한다면
perl은 기본 문법 밖에 모르니, 잘못된 부분이 있더라도 이해 부탁
잘못되거나 빠뜨린 부분이 있으면 가차없이 태클 부탁
토요일과 일요일만
토요일과 일요일만 제외하는 경우에 아래와 같이 계산할 수 있습니다.
--
War doesnt determine whos right, just whos left.
War doesnt determine whos right, just whos left.
좀 심플하게
Date::Calc 나 DateTime 모듈 같은 것을 사용해도 되지만 Perl 기본 Core 모듈이 아니라서
추가로 설치해야하죠.
날짜관련 모듈중에 Core모듈인 Time::Piece ( http://perldoc.perl.org/Time/Piece.html )라는 모듈이 있는데 이것을 이용해서 코딩해봤습니다.
위에 분들도 잘 코딩해주셨지만 보면 현대적 Perl과는 좀 거리가 먼 형식( 함수호출시 &를 붙이는 등)이
좀 보이네요. 여기를 참고하시면 현대적 Perl 스타일로 변화하는데 도움이 되실겁니다.
아.. 그렇군요.
아.. 그렇군요. 현대적 perl 스타일이라.. 공부가 많이 되었습니다. ^~^
perl 은 그저 손가는대로 코드를 써도 원하는대로 동작해 주는 언어라 별로 고민같은거 안하고 예전 스타일로 머물러 있었나 봅니다.
지금까지 투고하신 perl 관련글에서 도움을 많이 얻고 있고요, 특히 cpan 모듈을 잘 사용하시는 모습이 인상적이었습니다. 앞으로도 잘 부탁드리겠습니다!
(제가 쓰는 장비에서도 perl 버전이 좀 올라가면 좋으련만, 5.00503 에서는 Time::Piece 가 코어 모듈은 아니네요.)
--
War doesnt determine whos right, just whos left.
War doesnt determine whos right, just whos left.
:)
현대적 Perl 5모습을 보시려면
http://ironman.enlightenedperl.org/ 의 RSS,ATOM을 구독하시면 많은 도움이 되실겁니다.
그러고 보니 Time::Piece는 Perl 5의 최신 버젼인 Perl 5.10.1 버젼에서 Core로 들어갔더군요.
제가 5.10.1을 쓰다보니 - -;
시스템의 Perl 버젼이 낮으면 따로 컴파일해서 까셔도 됩니다.
http://lumberjaph.net/blog/index.php/2009/08/23/perl-5101-released/ 를 참고
여러 버젼의 Perl이 시스템에 설치되어있을 경우 perl 바이너리의 경로를 shebang line에서 바꾸는것 보다는
PATH 환경변수를 적절히 조정하여 사용하고 싶은 perl 바이너리가 있는 경로가 먼저나오게 한다음
shebang line을
#!/usr/bin/env perl
로 하면 PATH환경 변수에서 먼저 찾아지는 perl로 실행을 합니다.
네.. 불편함을 견디다
네.. 불편함을 견디다 못해서 일부 기계에는 perl 5.8 정도를 설치해 놓기도 했습니다.
그런데 관리해야 하는 기계가 좀 많은데다, 개중에는 인터넷과 단절되어 있기도 하고..
결국에는 가장 낮은 버전의 perl 에서도 돌아가는 코드를 쓰게 되더라구요.
운영 서버라는건 꽤 답답한 환경이구나..라고 생각하고 있습니다.
--
War doesnt determine whos right, just whos left.
War doesnt determine whos right, just whos left.
답글 달아 주신분들
답글 달아 주신분들 많이 감사드립니다. 많은 도움이 되었습니다. 제목 수정을 했습니다.
전 Date::Manip가지고 머리 굴리다 이렇게도 되는것을 알았습니다.
리턴이 되는 값들중에 토요일과 일요일을 뺀 값을 보내주네요.
그런데 공휴일까지 넣어서 계산을 하려면 어떤 방법이 되는지 한번더 알려주시면 감사하겠습니다.
---------------------------
http://pwbmini.tistory.com/
문서에 나와 있는 것 같은데요
http://search.cpan.org/perldoc?Date::Manip 문서를 보면
$d = DateCalc($d1,$d2 [,\$err] [,$mode]);
If $mode is 2, a business mode is used. That is, the calculation is done using business days, ignoring holidays, weekends, etc. In order to correctly use this mode, a config file must exist which contains the section defining holidays (see documentation on the config file below). The config file can also define the work week and the hours of the work day, so it is possible to have different config files for different businesses.
http://cpansearch.perl.org/src/SBECK/Date-Manip-5.54/DateManip.cnf 같은 설정파일을 만들어 놓으면
알아서 빼주는 것 같네요.
답글 감사합니다.
답글 감사합니다.
저도 문서를 다시읽어본후 파일을 만들어서 하면되겠구나 했는데, Manip.pm을 수정후에도 변화가 없었습니다. 그래서 다시 찾아보니 Date::Business를 사용할수도 있겠더군요. 그래서 예제에 있는 sub를 만들어서 테스트했는데 잘 되는것 같습니다.
---------------------------
http://pwbmini.tistory.com/
댓글 달기