将浮动整数转换为时间值

时间:2017-03-09 15:25:40

标签: mysql perl timestamp dbi

我正在尝试根据从MySQL数据库中提取的变量来计算时间。

用户输入一个数字来表示持续时间(以小时为单位)。我需要我的Perl脚本来检查事件结束的纪元时间。

实施例

0.5  = 30 min
0.75 = 45 min
3    = 3 hours

我发现在MySQL语句中使用以下代码可以正常工作,但是需要对其进行解析。我需要直接在Perl中完成这项工作,但无法找到执行此操作的模块/插件。

SELECT SEC_TO_TIME(duration * 60 * 60) AS duration FROM database;

输出

+----------+
| duration |
+----------+
| 01:00:00 | 
| 04:00:00 | 
| 02:00:00 | 
| 00:45:00 | 
+----------+

1 个答案:

答案 0 :(得分:1)

以下适用于SQLite。但它没有任何DATETIME类型。不幸的是,您还没有指定表格的样子以及列的内容。类型是,所以我不得不捣蛋。

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use DBI;
use Time::Piece;

my $db = 'DBI'->connect('dbi:SQLite:dbname=:memory:', "", "");
$db->do('CREATE TABLE durations (start INT, duration REAL)');

my $insert = $db->prepare('INSERT INTO durations (start, duration) VALUES (?, ?)');
my $now = time;
say join "\t", $now, localtime->cdate;
$insert->execute($now, $_) for 0.5, 0.75, 3;

my $select = $db->prepare('SELECT start, duration FROM durations');
$select->execute;
while (my ($start, $hours) = $select->fetchrow_array) {
    my $epoch = $start + $hours * 60 * 60;
    say join "\t", $epoch, localtime($epoch)->cdate;
}