当前位置: 首页 > 知识库问答 >
问题:

从ISO8601持续时间到时间以及从时间到ISO8601连续时间的转换

贺刚毅
2023-03-14

我有ISO8601格式的持续时间值,我将其转换为时间值为整数秒,如下所示:

ISO8601格式的持续时间值=“P1Y”。

duration = ISO8601::Duration.new(params[:duration]).to_seconds

# duration would have value in float, but I need it in int, so converting it to int.
time_in_seconds = (Time.now - duration).to_i

我将该值存储在“时间-单位-秒”中。因此,当我检索的值将是在int,我想转换回ISO8601持续时间格式,所以我应该得到“P1Y”转换后回来。

有没有快速的方法可以做到这一点?或者我必须把时间的int值转换成float,然后通过某种方法把它转换成ISO8601持续时间。

共有3个答案

史洛城
2023-03-14

如果你在Rails上

> time_in_seconds = 7425
=> 7425
> ActiveSupport::Duration.build(time_in_seconds).iso8601
=> "PT2H3M45S"
漆雕彬彬
2023-03-14

现在有ActiveSupport::Duration:

[4] pry(main)> ActiveSupport::Duration.parse('PT5S')
=> 5 seconds
[5] pry(main)> ActiveSupport::Duration.parse('PT5S').to_i
=> 5
孙洋
2023-03-14

我建议您使用< code>ruby-duration gem:

time_in_seconds = 100

require 'ruby-duration'

puts Duration.new(:seconds => time_in_seconds).iso8601
# => PT1M40S

或者看看那里的实现和/或窃取它。

 类似资料:
  • 我知道这是一个非常常见的问题,但我觉得我找到的答案并没有真正解决问题。我将概述我的具体用例,并对来自其他SO答案和网络的信息进行总结。 对于我正在编写的服务,数据库条目被创建并存储在移动设备和我们的网站上,需要以两种方式同步。我们目前的目标是Android和iOS,它们都使用sqlite作为关系数据库。服务器端是使用Django和MySQL在Python中实现的,但将来可能会有其他解决方案取代它。

  • 问题内容: 我有一个价值,我想得到另一个正好是1个月前的时间。 我知道可以用(想要另一个)进行减法,但这会导致a,而我反过来需要它。 问题答案: 尝试AddDate: 产生: 游乐场:http://play.golang.org/p/QChq02kisT

  • 在我的数据集中,我有一个变量< code>duration,其中有200万行< code>ISO 8601格式的数据。示例格式:< code>PT21S或< code>PT5M29S,< code>PT1M16S 我在将此字符串变量转换为时间时遇到问题。目前我正在使用查询: 通过该查询,可以区分持续时间是小时、分钟还是秒。我想将字符串持续时间转换为时间。我用过Regex和cast,但没有成功。当我

  • 在我的应用程序中,用户需要能够输入持续时间,包括分钟和秒。 我正在考虑使用Windows中的控件来更改时间,虽然我只需要几分钟和几秒钟,而且箭头也很好,但不是必需的。 JavaFX 2中是否已经有此控件 如果没有,我如何创建这样的控件 上述Windows控件的屏幕截图: 谢谢你的提示!

  • 我需要实施一个连续的任务时间表, 我通过Quartz通过,接下来的三次执行 但我希望02:45:00之后的下一次行刑是在03:30:00而不是03:00:00 有什么办法能做到吗

  • 对于我的项目,我必须读取在CSV文件中提供给我们的数据并以某种格式将其写出。我几乎完成了,但我遇到的问题是我的程序没有完全读取给定的时间。从这里开始,我的程序只是读取所有给定的时间。 我试图将<code>字符串时间。 这应该会回来 [芝麻街|埃尔莫之最1240:28:11] 但它返回 [Elmo的最佳|芝麻街124;2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1