在Perl中将浮点转换为小时和分钟

在Perl中将浮点转换为小时和分钟,perl,timestamp,Perl,Timestamp,我试图根据从MySQL数据库中提取的变量计算时间 用户输入一个数字以表示持续时间(小时)。我需要我的Perl脚本来检查事件结束的时间 例子 0.5=30分钟 0.75=45分钟 3=3小时 我发现在MySQL语句中使用以下语句是可行的,但随后需要进行解析。我需要直接在Perl中实现这一点,但找不到实现这一点的模块/插件 从数据库中选择秒到秒时间(持续时间*60*60)作为持续时间; 输出: +----------+ |持续时间| +----------+ | 01:00:00 | | 04

我试图根据从MySQL数据库中提取的变量计算时间

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

例子

0.5=30分钟
0.75=45分钟
3=3小时
我发现在MySQL语句中使用以下语句是可行的,但随后需要进行解析。我需要直接在Perl中实现这一点,但找不到实现这一点的模块/插件

从数据库中选择秒到秒时间(持续时间*60*60)作为持续时间;
输出:

+----------+
|持续时间|
+----------+
| 01:00:00 | 
| 04:00:00 | 
| 02:00:00 | 
| 00:45:00 | 
+----------+

以下内容适用于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;
}

“但随后需要解析”您的SQL从(命名错误的)表
数据库
中提取一个字段
duration
。我不明白用户输入如何与此相适应,或者需要解析什么。你真的要求用户输入一小时的小数点而不是分钟数吗?什么是“浮动整数”?你已经有三票来结束你的问题,因为你“不清楚你在问什么”。如果你很快添加了更多的细节,那么你可以避免你的问题被关闭。一旦它被关闭,它将很难复活。