获取持续时间的秒数

时间:2014-09-16 08:16:23

标签: time libreoffice duration calc

我正在寻找一些关于从文本中获取数秒的帮助。

这就是我在libreoffice计算专栏A中所拥有的:

  • A1:35天21小时56分钟
  • A2:3天0小时54分钟
  • A3:1天3小时0分钟
  • A4:5小时26分钟
  • A5:32分钟
  • A6:0秒

我正在寻找一个解决方案(我对Libreoffice Basic不好)从列B中的这个持续时间获得秒数。问题来自解析列(这是计为文本,并且在数据中格式化仍然没有不行。我不知道如何拆分单元格以获取例如:35*86400+21*3600+56*60单元格A1

我尝试使用libreoffice工具进行拆分,但是如果我在A列中没有天数,那么它会为例如:5(hours)*86400等...对于单元格A4

2 个答案:

答案 0 :(得分:0)

你没有说出你的首选语言,我可以用PHP向你展示一个例子。目标是只将数字留在字符串中并且计算总和。我不知道所有可能的字符串变体,但此代码适用于您的输入。

$durations = array(
    '35 days 21 hours 56 minutes',
    '3 days 0 hours 54 minutes',
    '1 days 3 hours 0 minutes',
    '5 hours 26 minutes',
    '32 minutes',
    '0 second'
);
$constants = array(60, 3600, 86400);
$durationsTime = array();
foreach ($durations as $duration) {
    $numbers = preg_replace('/[^0-9\s]/i', '', $duration);
    $values  = explode('  ', $numbers);
    $time    = 0;
    if (count($values) > 1) {
        foreach ($values as $key => $value) {
            $time += $value * $constants[count($values) - $key - 1];
        }
    } else {
        $time = strpos($duration, 'second') !== false ? intval($values[0]) : $values[0] * $constants[0];
    }

    $durationsTime[] = $time;
}
var_dump($durationsTime);die();

答案 1 :(得分:0)

使用libreoffice API的Starbasic:

function GETSECONDS(s1 as string) as long
 oFuncAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
 s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "days", "*24*60*60+"))
 s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "hours", "*60*60+"))
 s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "minutes", "*60+"))
 s1 = oFuncAccess.callFunction("SUBSTITUTE", array(s1, "seconds", "*1+"))
 s1 = left(s1, len(s1)-1)
 lRes = 0
 sAdd = split(s1, "+")
 for i = lbound(sAdd) to ubound(sAdd)
  sMult = split(sAdd(i),"*")
  lResMult = 1
  for j = lbound(sMult) to ubound(sMult)
   lResMult = lResMult * val(sMult(j))
  next
  lRes = lRes + lResMult
 next 
 getSeconds = lRes
end function

用作UDF,如:=GETSECONDS(A1)

时间测量单位必须是复数形式。

问候

阿克塞尔