【问题标题】:Convert a string like "10s" or "10h" to Duration将“10s”或“10h”之类的字符串转换为 Duration
【发布时间】:2020-07-14 06:04:26
【问题描述】:

我尝试将标题中提到的字符串解析为 Duration 或类似内容。 Duration.parse() 之类的东西不能按照我想要的方式工作。

给出了像“10s”或“10h”这样的字符串。我需要一个解决方案来使用该字符串并将其转换为 类似 Duration 或类似的东西。

编辑:澄清我的需求:我不想将“类似持续时间”的字符串与“PTxxx”一起使用,也不想自己解析这些字符串。对于那个恕我直言,应该有一个已经实施的解决方案。

有什么想法吗?

【问题讨论】:

  • 尝试检测字符串中的 's' 或 'h' 并使用字符串解析函数对其进行解析,然后将其转换为您的值。希望对您有所帮助...

标签: java parsing type-conversion


【解决方案1】:

你检查过documentation吗?以下是如何使用Duration.parse()

例子:

"PT20.345S" -- parses as "20.345 seconds"
"PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
"PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
"P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
"P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
"P-6H3M"    -- parses as "-6 hours and +3 minutes"
"-P6H3M"    -- parses as "-6 hours and -3 minutes"
"-P-6H+3M"  -- parses as "+6 hours and -3 minutes"

因此,如果您想要 10 秒的持续时间,那么 Duration.parse("PT10S")Duration.parse("PT10H") 持续 10 小时。

【讨论】:

  • 是的,我知道Duration.parse() 的工作原理。但我不想使用这样的字符串,我只想使用“10s”等,就像在spring boot application.yml中使用的那样。
  • 那你为什么说* Duration.parse() 之类的东西不起作用* 如果你知道它是如何工作的?
  • 我更新了问题以避免误解。希望对您有所帮助。
【解决方案2】:

https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-

    Duration tenSec = Duration.parse("PT10s");
    Duration tenHours = Duration.parse("PT10h");

【讨论】:

    【解决方案3】:

    org.springframework.boot.convert.DurationStyle 就是你要找的。​​p>

    DurationStyle.detectAndParse("10s")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多