PERL localtime Warning


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL localtime Warning
# 1  
Old 04-09-2010
CPU & Memory PERL localtime Warning

Hello All,

I am facing a warning "Argument "" isn't numeric in localtime at"
what i m using is below
my $timestamp = Timestamp(time);

go_log("###############$timestamp###############");

can some one please suggest the way to avoid this message Smilie
# 2  
Old 04-09-2010
Quote:
Originally Posted by NIMISH AGARWAL
Hello All,

I am facing a warning "Argument "" isn't numeric in localtime at"
what i m using is below
my $timestamp = Timestamp(time);

go_log("###############$timestamp###############");

can some one please suggest the way to avoid this message Smilie
And can you please suggest what you are trying to do here ?
For I don't see that warning -

Code:
$
$ perl -le 'my $timestamp = Timestamp(time); go_log("###############$timestamp###############");'
Undefined subroutine &main::Timestamp called at -e line 1.
$
$

tyler_durden
# 3  
Old 04-09-2010
Print Seconds since the Epoch

Would have to know what your
Code:
  Timestamp()

function looks like....

if you want seconds since the epoch ( 00:00:00 Jan 01, 1970 GMT, not counting leap seconds):

do one of these:

Code:
bash> date +%s
bash> perl -e 'print time'

If you want a text formatted string for "$timestamp", based on the current time, the cannonical way to do this in perl is simply

Code:
bash> perl -e 'print scalar localtime'


Last edited by deindorfer; 04-09-2010 at 10:01 PM.. Reason: Add Breadth
# 4  
Old 04-12-2010
Question here is the function

Code:
ub Timestamp
{
 my ($time) = (@_);
 my ($sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst) = localtime($time);
if(length($hour) == 1) {
		$hour = "0" . $hour;
	}
	if(length($min) == 1) {
		$min = "0" . $min;
	}
	if(length($sec) == 1) {
		$sec = "0" . $sec;
	}

	# Set to 2 digit month from 01 to 12
	$month += 1;
	if(length($month) == 1) {
  		$month = "0" . $month;
	}
	# Set to 2 digit day
	if(length($mday) == 1) {
		$mday = "0" . $mday;
	}
	# Use four digit year ($year is a value based on # of years since 1900)
	$year += 1900;
	
	$currentTime = "$hour$min";			# Set for checking suspending activity
	
	return("$year-$month-$mday $hour:$min:$sec");
}


Last edited by pludi; 04-12-2010 at 02:25 AM.. Reason: code tags, please...
# 5  
Old 04-12-2010
This works fine for me -

Code:
$
$
$ cat timecalc_1.pl
#!perl -w
my $timestamp = Timestamp(time);
print "Timestamp = $timestamp\n";
sub Timestamp {
  my ($time) = (@_);
  my ($sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst) = localtime($time);
  if(length($hour) == 1) {
    $hour = "0" . $hour;
  }
  if(length($min) == 1) {
    $min = "0" . $min;
  }
  if(length($sec) == 1) {
    $sec = "0" . $sec;
  }
  # Set to 2 digit month from 01 to 12
  $month += 1;
  if(length($month) == 1) {
    $month = "0" . $month;
  }
  # Set to 2 digit day
  if(length($mday) == 1) {
    $mday = "0" . $mday;
  }
  # Use four digit year ($year is a value based on # of years since 1900)
  $year += 1900;
  return("$year-$month-$mday $hour:$min:$sec");
}
$
$

The code for formatting the output is way too verbose. You could probably use "sprintf" here.

Code:
$
$ cat timecalc_2.pl
#!perl -w
my $fmt_ts = formatted_timestamp(time);
print "Formatted timestamp = $fmt_ts\n";
sub formatted_timestamp {
  my ($t) = (@_);
  #@x = ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
  my @x = localtime($t);
  return sprintf("%4d-%02d-%02d %02d:%02d:%02d", $x[5]+1900, ++$x[4], $x[3], $x[2], $x[1], $x[0]);
}
$
$

tyler_durden
# 6  
Old 04-12-2010
Sometimes Shelling Out is OK

If your security policy will permit shelling out, I find this idiom easier than what Tyler sent; It's less error prone:

Code:
chomp( my $timestamp = qx~date +'%F %T'~);

... do something with "$timestamp" ...

If your policy does not permit shelling out; have a look at Graham Barr's Date::Format on cpan:

Date::Format - search.cpan.org

Last edited by deindorfer; 04-12-2010 at 01:56 PM.. Reason: Additional Comment
# 7  
Old 04-13-2010
Thank you very much for bright suggestions :-)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Perl error : perl: warning: Setting locale failed.

This's my problem perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LC_ALL = "en_US.UTF-8", LC__FASTMSG = "true", LC_MESSAGES = "", LC_CTYPE = "en_US.UTF-8", LC_TYPE = "en_US.UTF-8", LANG = "EN_US"... (1 Reply)
Discussion started by: bobochacha29
1 Replies

2. Programming

TZ, localtime and strftime problem on AIX and Solaris

Hello all, I have the following code that seems to be misbehaving depending on the timezone setting (TZ Environment variable). It gives the correct value when TZ is in POSIX format and the wrong value when in OLSON format. #include <stdio.h> #include <stdlib.h> #include <time.h> #include... (6 Replies)
Discussion started by: biju64
6 Replies

3. Shell Programming and Scripting

How to use a variable in perl localtime()?

Hi all, a=$1 ## b=`echo "86400 * $a"|bc` `perl -e 'use POSIX qw(strftime);$now_string = strftime "%d/%m/%Y", localtime(time-$b); print $now_string,"\n";' > date_file` but im always getting current date; can any one suggest me any the improvement the above works fine if i use some thing... (2 Replies)
Discussion started by: zozoo
2 Replies

4. Shell Programming and Scripting

Perl help LocalTime in New Format

Hi, I'm new to perl scripting and am trying it out. I have a file written in the following format: myfile-MMDDYY where MM is the number of the Month; DD the Day and YY the last two of the year... (Apologies for dumbing this down; I'm trying to be clear). There is a new file put onto my... (2 Replies)
Discussion started by: Astrocloud
2 Replies

5. Shell Programming and Scripting

Pack and unpack localtime in perl script

Hi I have a code like this: sub WriteEbcdicHeader { my $Htimestamp=localtime();#i need to pack and unpack this my $eheaderline = $Htimestamp; #packing has to be done here #unpacking has to be done after packing print $EOUTFILE return $eheaderline; } sub WriteEbcdicTrailer { ... (5 Replies)
Discussion started by: rbathena
5 Replies

6. Shell Programming and Scripting

what is the default return type of localtime() in perl?

Hi, I have given like this to get the time of the sub routine. my $start = localtime(); print "\n start time: $start \n"; Output start time: Fri Apr 29 01:01:31 2011 I want to know what is the format of the time. I am not able to follow is is HH:MM:SS or MM:HH:SS os... (2 Replies)
Discussion started by: vanitham
2 Replies

7. Shell Programming and Scripting

date with perl localtime

Hi Experts, I know how to handle normal date changes in perl. Most of my requirement are full filled with following: $date1 = strftime "%Y%m%d",localtime; $date2 = strftime "%Y%m%d",localtime(time -24 * 60 * 60); $date3 = strftime "%Y%m%d",localtime(time +24 * 60 * 60); $date4 = strftime... (4 Replies)
Discussion started by: mtomar
4 Replies

8. HP-UX

sleep & localtime query

Hi, I work on HPUX application and i had a query regarding the sleep & localtime system call in HPUX. Here is the code that we have : const uint32_t WAKE_INTERVAL_SEC(30*60); while (true) { // Find out what time it is time(&currentTime);... (3 Replies)
Discussion started by: nsvora
3 Replies

9. UNIX for Advanced & Expert Users

converting localtime to unixtime

hi, how to convert the localtime to unixtime? i have date from the date command in unix i want to convert it into unixtime thnx (2 Replies)
Discussion started by: AshishK
2 Replies

10. Shell Programming and Scripting

Perl + localtime()

ok here is a perl date question not asked befor. i know i am feeling small for not knowing. BUT!!!! $ENV{TZ}="US/Central"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(); how can i do the addition to year so i can get the current year w/o going $ntime=$year+1900;... (3 Replies)
Discussion started by: Optimus_P
3 Replies
Login or Register to Ask a Question