| [reply] |
Now that you've got some good answers...
Why do you want to do this? If you're updating data in a MySQL table and you want to update a timestamp too, consider using the timestamp column type. It automatically updates any time a record is changed.
If it's not that, then what are you doing that requires this MySQL timestamp variable in Perl? I'm interested now...
| [reply] [d/l] |
use Date::Calc qw/Today_and_Now/;
my $stamp = sprintf '%04d%02d%02d%02d%02d%02d', Today_and_Now();
| [reply] [d/l] |
This really isn't a perl solution (it is another way to do it), but you can always do something like
$dbh->do("SELECT NOW()");
That will even avoid problems if the clock on your sql machine and the clock on your server are off (even by a few seconds). Always go with what your datasource says, or use a time server to sync them up.
--jb
| [reply] [d/l] |
Btw: if you just insert NULL (or nothing) into a timestamp field, the actual date is used by the mysql-server instead.
Best regards,
perl -le "s==*F=e=>y~\*martinF~stronat~=>s~[^\w]~~g=>chop,print" | [reply] |
Some useful functions that I've made to deal with timestamps
sub TimeFormatHash{ ($pattern, %hash) = @_;
$output = $pattern;
$output =~ s|(\w+)|$hash{$1}|gs;
return $output;
}
sub TimeHash{ (@timevar) = @_;
my %TIME;
($TIME{sec}, $TIME{min}, $TIME{hour}, $TIME{day}, $TIME{month}, $TIME{year},
$TIME{wday}, $TIME{yday}, $TIME{isdst} ) = @timevar;
$TIME{year}=1900 + $TIME{year}; #Allows full date, Y2K
$TIME{month} ++; #Month starts at 0, so +1 for calendar month
$TIME{wday} ++; #Weekday starts at 0, so +1 for calendar weekday (1=Sunday)
if ($TIME{month} < 10)
{$TIME{month} = "0" . $TIME{month}; }#append 0 to start of month
if ($TIME{day} < 10)
{$TIME{day} = "0" . $TIME{day}; } #append 0 to start of day
return %TIME;
}
You can use then like:
my %now = TimeHash(gmtime() );
my $this_date = TimeFormatHash("year/month/day", %now );
| [reply] |