GMT -4 to determine day of week


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting GMT -4 to determine day of week
# 1  
Old 06-13-2011
GMT -4 to determine day of week

I pulled the following code from one of Jim's threads. Since my server time is GMT, I need to make sure the output is GMT-4. Does anyone know how to tweak Perl to reflect this?

Thanks
Scott

Code:
#!/bin/ksh
# input format YYYY-MM-DD prints day name
dow()  
{
 perl -e '
  use POSIX qw(strftime);
  $fmt = "%A";  # %a = abbreviated weekday %u = weekday number 
  $mday = substr("$ARGV[0]", 8, 2);
  $mon =  substr("$ARGV[0]", 5 ,2);
  $year = substr("$ARGV[0]", 0 ,4);
  $weekday =
    strftime($fmt, 0, 0, 0, $mday , $mon - 1, $year - 1900, -1, -1, -1);
  print "$weekday";
  ' "$1"
}
echo "$(dow `date "+%Y-%m-%d"` )"

# 2  
Old 06-13-2011
This is what the TZ variable does
Code:
#!/bin/ksh                                                              
# input format YYYY-MM-DD prints day name                               
dow()                                                                   
{                                                                       
 perl -e '                                                              
  use POSIX qw(strftime);                                               
  $fmt = "%A";  # %a = abbreviated weekday %u = weekday number          
  $mday = substr("$ARGV[0]", 8, 2);                                     
  $mon =  substr("$ARGV[0]", 5 ,2);                                     
  $year = substr("$ARGV[0]", 0 ,4);                                     
  $weekday =                                                            
    strftime($fmt, 0, 0, 0, $mday , $mon - 1, $year - 1900, -1, -1, -1);
  print "$weekday";                                                     
  ' "$1"                                                                
}                                                                       
for foo in -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11
do
    FOO="FOO"${foo}
    export TZ=$FOO
    echo "TZ=${FOO}: `date`"
    echo "$(dow `date "+%Y-%m-%d"` )"                                       
done
echo '*****************  GMT -4'
export TZ=GMT-4
    echo "TZ=${TZ}: `date`"
    echo "$(dow `date "+%Y-%m-%d"` )"

So, if you do this
Code:
dow()  
{
 export TZ=GMT-4
 perl -e '
  use POSIX qw(strftime);
  $fmt = "%A";  # %a = abbreviated weekday %u = weekday number 
  $mday = substr("$ARGV[0]", 8, 2);
  $mon =  substr("$ARGV[0]", 5 ,2);
  $year = substr("$ARGV[0]", 0 ,4);
  $weekday =
    strftime($fmt, 0, 0, 0, $mday , $mon - 1, $year - 1900, -1, -1, -1);
  print "$weekday";
  ' "$1"
}

you are assured of the time zone setting.
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 06-13-2011
This should do it, replace the perl part in your code.

Code:
 
perl -e '
use POSIX qw(strftime);
use Time::Local;
@inp = split(/-/,$ARGV[0]);
$epochTime = timegm(0,0,0,$inp[2],$inp[1],$inp[0]);
@time=gmtime($epochTime -(4*3600)); #=> GMT-4
$day = strftime("%A",0,0,0,$time[3],$time[4],$time[5],-1,-1,-1);
print $day'

This User Gave Thanks to getmmg For This Post:
# 4  
Old 06-13-2011
Guys,

Something doesn't appear to be working... The following should echo "Tuesday" if I provide GMT+11.


Code:
#!/bin/ksh
dow()  
{
 export TZ=GMT+11
 perl -e '
  use POSIX qw(strftime);
  $fmt = "%A";  # %a = abbreviated weekday %u = weekday number 
  $mday = substr("$ARGV[0]", 8, 2);
  $mon =  substr("$ARGV[0]", 5 ,2);
  $year = substr("$ARGV[0]", 0 ,4);
  $weekday =
    strftime($fmt, 0, 0, 0, $mday , $mon - 1, $year - 1900, -1, -1, -1);
  print "$weekday";
  ' "$1"
}
echo "$(dow `date "+%Y-%m-%d"` )"

# 5  
Old 06-13-2011
Did you tried my code?.
# 6  
Old 06-13-2011
Yes, got the following error.
Day '' out of range 1..31 at -e line 5

Last edited by WhoDatWhoDer; 06-13-2011 at 12:11 PM..
# 7  
Old 06-13-2011
Try this,


Code:
#!/bin/ksh
# input format YYYY-MM-DD prints day name
dow()
{
perl -e '
use POSIX qw(strftime);
use Time::Local;
@inp = split(/-/,$ARGV[0]);
$epochTime = timegm(0,0,0,$inp[2],$inp[1]-1,$inp[0]-1900);

@time=gmtime($epochTime +(11*3600)); #=> GMT -4
$day = strftime("%A",0,0,0,$time[3],$time[4],$time[5],-1,-1,-1);
print $day
' "$1"
}
echo "$(dow `date "+%Y-%m-%d"` )"


Last edited by getmmg; 06-13-2011 at 12:17 PM.. Reason: Updated Time Conversion
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Get the week's day

Hi All, I have the below requirement , if i give the week number for ex 41 i need to get the date for Monday and thursday for this given week. my expected output is 13/10/2014 (Monday's date) and 16/10/2014 (Thursday's date) I am using GNU LINUX . Pls help me with your thoughts. Thanks in... (7 Replies)
Discussion started by: mohanalakshmi
7 Replies

2. UNIX for Dummies Questions & Answers

Sudoers for one day per week?

I have been volunteered by my boss to be the sysadmin for our production redhat server. He asked me to tighten the security to avoid mishaps like "rm -f *" that occured not long ago. Right now, we have 53 users sudo-ing into the machine and it is an audit nightmare. I am wondering if it... (15 Replies)
Discussion started by: alan
15 Replies

3. HP-UX

Find Day of Week

In HP-UX the date command does not have the "-d" switch like some other *nixes do. I'm working a simple script to tell me, given the day, month and year what day of the week that falls on. Assuming valid day, month and year input (I'd perform quality checks on the input separately, but not... (5 Replies)
Discussion started by: rwuerth
5 Replies

4. UNIX for Dummies Questions & Answers

Day of the week from a string

Hi All, I need to know how to derive the day of the week by passing the value in following format: Feb 28 2010 The output I'm expecting is Sunday or Sun. I know, I can use the following code to get the day of the week. date +%a But I want to pass the value as a string. Please help... (11 Replies)
Discussion started by: shash
11 Replies

5. Shell Programming and Scripting

Get day of week from cal

Hi all, I am trying to get dow from cal using below script #! /bin/bash YEAR=`echo $1 | cut -c 1-4` MONTH=`echo $1 | cut -c 5-6` DAY=`echo $1 | cut -c 7-8` for i in 1 2 3 4 5 6 7 do dayofweek=`cal $MONTH $YEAR | awk '$i == $DAY {printf("%s","$i")}'` echo $dayofweek... (4 Replies)
Discussion started by: bzylg
4 Replies

6. Shell Programming and Scripting

determine last day of the month

In a ksh script how do I determine if I am on the last day fo the month ? thanks (4 Replies)
Discussion started by: hanton
4 Replies

7. HP-UX

Get Day of Week from date

Hi All, I have date in string format 'YYYY-MM-DD'. I want to know day of the week for this date. Example. For '2005-08-21' my script should return '0' or Sunday For '2005-08-22' it should return '1' or Monday I want piece of code for HP-UX korn shell. Appreciate reply on this. (5 Replies)
Discussion started by: vpapaiya
5 Replies

8. UNIX for Dummies Questions & Answers

Changing First Day Of The Week?

Hi All, Our system is running on Solaris 8 and we are using US locale. By default the First Day Of Week is Sunday, is it possible for us to change it to Monday? I have googled it but found very little of use. THanks in advance. (2 Replies)
Discussion started by: fowlerleftfoot
2 Replies

9. Shell Programming and Scripting

Yesterday's Day of week

I need o get yesterday's day of week but im not exactly sure. the actual name is what i want. I can do it with numbers but im not sure with words. (3 Replies)
Discussion started by: rcunn87
3 Replies

10. Programming

Function that gets the day of the week (0-6) ??

Hi , I am working at Unix system,using c lang. I need c fun which return the day of the week . For example : 0- Sunday. 1- Monday. .... 10x. (4 Replies)
Discussion started by: kamil
4 Replies
Login or Register to Ask a Question