我在用perl将Oracle日期字段转换为linux时间格式时遇到了问题。我像这样把日期字段拉出来:
my $query = "SELECT RESPONSE_DATE FROM TABLENAME";
my $sth = $dbh->prepare($query);
$sth->execute() or die "Couldn't execute statement: " . $sth->errstr;
my @results = $sth->fetchrow_array();
printf "response_date=%s",$results[0];
printf "localtime(time)=%s",localtime(time);输出:
response_date=14-OCT-14 08.35.00.000000 PM
localtime(time)=Tue Aug 18 23:35:13 2015我可以得到当地时间的所有片段如下:
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);但现在我需要将这些片段与类似的response_date片段进行比较。有什么想法吗?
发布于 2015-08-19 01:00:47
我想您需要所有的localtime字段来进行某种日期计算?
Time::Piece模块是解决这一问题的常用方法。它允许您解析数据库时间,并将localtime重载到它返回标量上下文中的Time::Piece对象。
不幸的是,Time::Piece不会解析小数秒字段,因此如果不总是零,则需要从日期时间字符串中删除它。
显然,一旦将数据库值和当前日期都作为Time::Piece对象,其他计算也是可能的。
use strict;
use warnings;
use Time::Piece;
use Time::Seconds 'ONE_DAY';
my $s = '14-OCT-14 08.35.00.000000 PM';
my $dt = Time::Piece->strptime($s, '%d-%b-%y %H.%M.%S.000000 %p');
my $now = localtime;
printf "%s was %.3f days ago\n",
$dt->strftime('%a %d-%b-%Y at %H:%M:%S'),
($now - $dt)->days;输出
Tue 14-Oct-2014 at 20:35:00 was 308.190 days agohttps://stackoverflow.com/questions/32084580
复制相似问题