将Unix日期“Wed Sep 15 14:21:36 2010”转换为perl或MySQL中的unix时间戳,以存储在mySQL中

时间:2011-11-03 22:12:24

标签: mysql perl

我正在尝试将人类可读格式的常规Unix日期转换回unix时间戳,而不会为一周的几个月和几天制作数组。 显然,“%”需要在perl中进行转义 我尝试了“%%”和“\%”以及RTM,这就是我最终得到的结果\ %%

$myDate="Wed Sep 15 14:21:36 2010";
$datePattern="\%%a \%%b \%%e \%%H:\%%i:\%%s \%%Y";

MySQL有一个功能

UNIX_TIMESTAMP (STR_TO_DATE (\'$myDate\' \, \'$datePattern\'))";

我的最后陈述如下: 该命令直接来自mySQL,但是当我从perl调用它时没有。

replace mytable values ('some value', UNIX_TIMESTAMP (STR_TO_DATE (\'$myDate\' \, \'$datePattern\')))";

3 个答案:

答案 0 :(得分:1)

尝试Date::Manip

use strict;
use warnings;

BEGIN {
    $Date::Manip::Backend = 'DM5';
}
use Date::Manip;
my $myDate = "Wed Sep 15 14:21:36 2010";
print Date::Manip::UnixDate( $myDate, '%Y-%m-%d %H:%M:%S' );

或查看DateTime modules

这是我在DateTime的尝试。一个使用mysql DateTime模块,另一个没有。

use strict;
use warnings;
use DateTime::Format::Strptime;
use DateTime::Format::MySQL;

my $myDate = "Wed Sep 15 14:21:36 2010";
my $Strp   = new DateTime::Format::Strptime( pattern => '%a %b %e %H:%M:%S %Y', );
my $dt     = $Strp->parse_datetime($myDate);

print $dt->strftime('%Y-%m-%d %H:%M:%S') . "\n";

print DateTime::Format::MySQL->format_datetime($dt) . "\n";

答案 1 :(得分:1)

另一种选择可能是使用Time :: Piece

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $mydate = "Wed Sep 15 14:21:36 2010";
my $mytime = Time::Piece->strptime($mydate, "%a %b %e %H:%M:%S %Y");
print $mytime->strftime("%Y-%m-%d %H:%M:%S\n");

答案 2 :(得分:0)

一种选择是使用Date::Parse

use strict;
use warnings;

use Date::Parse;

my $date = "Wed Sep 15 14:21:36 2010";
my $time = str2time($date);

从那里,您可以发出更新数据库记录的查询以使用$time