- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - HP-UX
- >
- First work day in the month?
Categories
Company
Local Language
Forums
Discussions
Knowledge Base
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Knowledge Base
Forums
Discussions
- Cloud Mentoring and Education
- Software - General
- HPE OneView
- HPE Ezmeral Software platform
- HPE OpsRamp
Knowledge Base
Discussions
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2007 09:19 AM
05-14-2007 09:19 AM
I have another problem. I need to know if today is the first work day of the month. For example, if the 1st was Saturday then Monday the 3rd would be the first work day. Any ideas?
Thank you,
Ryan
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2007 09:23 AM
05-14-2007 09:23 AM
Re: First work day in the month?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2007 09:31 AM
05-14-2007 09:31 AM
SolutionI'll assume that you have been a good boy and set up /etc/acct/holidays and it's a better idea to set up multiple years by creating separate /etc/acct/holidays_YYYY because consider the problem of also crossing year boundaries and 1-Jan is a very common holiday.
I would set up a cron job that runs EVERY Monday-Friday (remember some folks have very long holidays) and then do this:
#!/usr/bin/sh
# first test to see if yesterday's month
# skipping past Sundays and Saturdays and
# holidays is not equal to today's month
if [[ $(caljd.pl -p 1 -x 0 -x 6 -h -M) != $(caljd.pl -M) ]]
then
# now check to see if today isn't also
# a holiday
if [[ $(caljd.pl) = $(caljd.pl -h) ]]
then
echo "Today is the first working day of the month."
fi
fi
Invoke as caljd.pl -u for full usage and examples. You should already have a copy of the script.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-14-2007 01:25 PM
05-14-2007 01:25 PM
Re: First work day in the month?
But if you did, and did not count holidays, then the rule would appear to be:
It is the first workday in the month if it is the first of the months and not a Saturday nor Sunday or if it is a Monday and the 2nd or 3rd of the month.
In Perl:
my ($mday,$wday) = (localtime(time))[3,6];
print "YES\n" if (($mday==1 && $wday && $wday != 6) || ($mday < 4 && $wday == 1 ))
And in perl with taking a YYYYMMDD as argument:
--- test.pl ---
use Time::Local;
$x=shift;
$y=timelocal(0,0,0,substr($x,6,2),substr($x,4,2)-1,substr($x,0,4)-1900);
my ($mday,$wday) = (localtime($y))[3,6];
print "YES\n" if (($mday==1 && $wday && $wday != 6) || ($mday < 4 && $wday == 1 ))
----
perl test.pl 20070101
The first mondays in a month is a relatively popular holiday day!
fwiw,
Hein
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2007 12:03 AM
05-15-2007 12:03 AM
Re: First work day in the month?
# start of SCHEDULE TEST
# 1. Have a $x1_listofdates in this program that gives a schedule.
# 2. Run the cronjob every day from 1st to 10th of the month.
# 3. Have the job exit out unless the day matches the schedule.
# note: typeset -i tells unix the value is an integer, not octal binary.
#------------------------------------------------------------------------------
typeset -i x1_day_of_month=`date +"%d"`
x1_month_of_year=`date +"%b"`
typeset -i x1_year=`date +"%Y"`
x1_datestring=`printf "%02d%s%4d\n" $x1_day_of_month $x1_month_of_year $x1_year`
# these days are when the script should run.
# they are the 2nd workday of each month.
x1_listofdates="
05Sep2007
02Oct2007
02Nov2007
04Dec2007
"
x1_FLAGRUN=0
echo "Run my special job today?"
for x1_D in $x1_listofdates
do
echo " today is $x1_datestring look at $x1_D from the list. "
if [ "$x1_D" = "$x1_datestring" ] ; then
echo "Yes. "
x1_FLAGRUN=1
else
echo "do not run today"
fi
done
if [ $x1_FLAGRUN != 1 ] ; then
echo "do not run today"
exit
fi
rest of program goes here
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2007 12:09 AM
05-15-2007 12:09 AM
Re: First work day in the month?
Of course if your schedule follows NO rules, this might be a good thing.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2007 05:56 AM
05-15-2007 05:56 AM
Re: First work day in the month?
http://www.unixreview.com/documents/s=1344/ur0309c/
That one links to this one, "The American Secular Holidays Calendar":
http://www.smart.net/%7Emmontes/ushols.html#ALG
It goes into great detail about "the first workday of a month", with all the exceptions.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2007 09:02 AM
05-15-2007 09:02 AM
Re: First work day in the month?
Thanks everyone for all the help. I am having a
little trouble making the holidays work as A. Clay correctly pointed out. I am getting this error message. "File /etc/acct/holidays year 1998 does not match expected year 2007".
Any ideas?
Thank you,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2007 09:17 AM
05-15-2007 09:17 AM
Re: First work day in the month?
Anyway, update the file with the current holidays and the current year and you should be fixed.
One of the changes to the holidays file convention I implemented for caljd.xx, is to add a year extension Caljd.xx will always try to find holidays_YYYY before it falls back on the default file. This way, date calculations involving holidays which cross year boundaries work as expected. I always symbolically link the current year's /etc/acct/holidays_YYYY to /etc/acct/holidays so that any other UNIX software works as expected.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-15-2007 10:36 AM
05-15-2007 10:36 AM
Re: First work day in the month?
Thanks. I updated /etc/acct/holidays and now it works!. I deserved to be called stupid because the error message described the problem exactly.
Thank you,
Ryan
PS, It's time for points!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2007 08:31 AM
05-16-2007 08:31 AM
Re: First work day in the month?
My script now works great but I have a new problem. My company has offices in three countries and some of the holidays are different for each of them. Is there a way to use a different file instead of /etc/acct/holidays?
Thanks,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2007 08:43 AM
05-16-2007 08:43 AM
Re: First work day in the month?
You are wanting WAY too much sugar for a dime. You could move your holidays file(s) to a temporary location and replace with different version(s) and move the temporary
file(s) back to the original location when finished. The only downside is that this action could clobber accounting if someone happened to be running some of the accounting commands during the interim.
I'll take a look and see how hard this will be. One of my biggest problems is finding free letters for options. There have been so many requests for enhancements that the alphabet is beginning to run dry. There was a time when caljd.sh was only a few lines long.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2007 09:12 AM
05-16-2007 09:12 AM
Re: First work day in the month?
Ryan,
You may want to further clarify this need.
I'm guessing here that you want to run the script in a central location, for all countries, otherwise it should prove easy enough to give each country the right holidays file.
Are you now looking for the first day in the months which is a work day in all countries? That's create serious missunderstandings I bet! Or do just want to deal with a country at a time?
If so, it would be nice if the script poicked up an environment variable to point to the right holidays file, or you coudl temporary softlink it.
Clay,
I tend to deal with running out of letter in the alphabet through env variables.
In your case without a letter of an explicit argument option I would code up something like:
my $CALJD_HOLIDAY_FILE='etc/acct/holidays';
my $CALJD_HOLIDAYS_ENV='CALJD_HOLIDAYS';
:
my $caljd_holiday_file = $ENV{$CALJD_HOLIDAYS_ENV};
$caljd_holiday_file = $CALJD_HOLIDAY_FILE unless $caljd_holiday_file ;
If I have a letter, then I might use getops as, in a 3-way naming scheme as
my $EVALUATE_CSV = "EVALUATE_CSV";
my $CSV = "evaluate.csv";
:
getopts ('c:dr:vis',\%opt) or &usage;
&usage unless @ARGV;
$verbose = $opt{v} ? 1 : 0;
$debug = $opt{d} ? 1 : 0;
$csv = $opt{c} ? $opt{c} : $ENV{$EVALUATE_CSV} ;
$csv = $CSV unless $csv;
So there is 3 places to get a name...
1) explicit argument
2) env variable
3) softcoded default.
But you knew all that!
Cheers,
Hein.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2007 10:55 AM
05-16-2007 10:55 AM
Re: First work day in the month?
Based upon your script logic, your should now be able to replace the "-h" argument with "-H ${YOURFILE}".
It took much longer to update the usage and examples than it did to implement the actual coding changes.
Here is caljd.sh, Vrsn 2.3.
Hein: Thanks for the advice but fortunately 'H' was still available.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-16-2007 10:57 AM
05-16-2007 10:57 AM
Re: First work day in the month?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-17-2007 11:43 AM
05-17-2007 11:43 AM
Re: First work day in the month?
Thank you very much! The new option works great!
Hein,
Thanks for your ideas as well.
This is the best unix website in the world!!!!!
Thank you,
Ryan
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-18-2007 07:36 AM
05-18-2007 07:36 AM
Re: First work day in the month?
In general this topic once again show:
'somebody need to enter the holidays'
'there's local variations'
'many systems have the need for handling several calendars'
Our company is involved in operations many places around the world. Date/Time/Timezones/holidays/character sets seems to always be a returning problem.
Using Julian date have always been one of the trick's to overcome some of the date calculation problems.
Thanks Clay for yet a new version of caljd I've been using it for "the tricky dates" many times, and other times as reference lookup when "date scripting".
P.S.
* In some countries first working day would also be Sunday... :-)
* If you have Microsoft Outlook you could search for a file named: OUTLOOK.HOL
This is a flat-file which can contain dates that you need. It is also sectioned into countries.
/Tor-Arne