1

我正在使用 Perl 填充将通过 Ruby on Rails 显示的数据库。该数据库是通过 Rails 迁移创建的。

我有一个用 Perl 格式化的日期字符串以适应 Rails“created_at”日期约定,但 MySQL 不允许它。有没有办法做到这一点?

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$rails_time = printf ("%4d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
print "$rails_time\n";
4

2 回答 2

4

Perlprintf不返回格式化字符串:

等效于print FILEHANDLE sprintf(FORMAT, LIST),但$\不附加(输出记录分隔符)。

所以你$rails_time最终会得到print回报(最有可能1)。您想用来sprintf生成 ISO-8601-ish 时间戳:

$rails_time = sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year + 1900, $mon + 1, $mday, $hour, $min, $sec);

MySQL 很乐意接受它$rails_time作为时间戳值。

于 2012-04-24T04:09:13.823 回答
1

Time::Piece使用(与 Perl 一起分发)更容易:

use Time::Piece qw(localtime);
localtime->strftime('%F %T');
# returns string '2012-04-24 12:11:31'
于 2012-04-24T10:11:31.863 回答