gpt4 book ai didi

linux - 将 Oracle DATE 转换为 Linux 时间

转载 作者:太空狗 更新时间:2023-10-29 12:29:30 28 4
gpt4 key购买 nike

我在将 Oracle DATE 字段转换为 perl 中的 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 的相似片段进行比较。有什么想法吗?

最佳答案

我假设您需要所有 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 ago

关于linux - 将 Oracle DATE 转换为 Linux 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32084580/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com