首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Oracle日期转换为linux时间

问将Oracle日期转换为linux时间
EN

Stack Overflow用户
提问于 2015-08-19 00:18:44
回答 1查看 152关注 0票数 2

我在用perl将Oracle日期字段转换为linux时间格式时遇到了问题。我像这样把日期字段拉出来:

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
response_date=14-OCT-14 08.35.00.000000 PM
localtime(time)=Tue Aug 18 23:35:13 2015

我可以得到当地时间的所有片段如下:

代码语言:javascript
复制
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);

但现在我需要将这些片段与类似的response_date片段进行比较。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 01:00:47

我想您需要所有的localtime字段来进行某种日期计算?

Time::Piece模块是解决这一问题的常用方法。它允许您解析数据库时间,并将localtime重载到它返回标量上下文中的Time::Piece对象。

不幸的是,Time::Piece不会解析小数秒字段,因此如果不总是零,则需要从日期时间字符串中删除它。

显然,一旦将数据库值和当前日期都作为Time::Piece对象,其他计算也是可能的。

代码语言:javascript
复制
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;

输出

代码语言:javascript
复制
Tue 14-Oct-2014 at 20:35:00 was 308.190 days ago
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32084580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档