我需要将持续时间字符串解析98d 01h 23m 45s
为毫秒形式。
我希望SimpleDateFormat
像这样的持续时间相等,但是我什么也找不到。有人会建议为此目的使用或支持SDF吗?
我目前的计划是使用正则表达式来匹配数字并做类似的事情
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher("98d 01h 23m 45s");
if (m.find()) {
int days = Integer.parseInt(m.group());
}
// etc. for hours, minutes, seconds
然后使用TimeUnit将它们放在一起并转换为毫秒。
我想我的问题是,这似乎有点过头了,它可以轻松完成吗?出现了很多有关日期和时间戳的问题,但这也许有些不同。
使用a Pattern
是一种合理的方法。但是,为什么不使用单个字段来获取所有四个字段呢?
Pattern p = Pattern.compile("(\\d+)d\\s+(\\d+)h\\s+(\\d+)m\\s+(\\d+)s");
然后使用索引组提取。
编辑:
基于您的想法,我最终编写了以下方法
private static Pattern p = Pattern
.compile("(\\d+)d\\s+(\\d+)h\\s+(\\d+)m\\s+(\\d+)s");
/**
* Parses a duration string of the form "98d 01h 23m 45s" into milliseconds.
*
* @throws ParseException
*/
public static long parseDuration(String duration) throws ParseException {
Matcher m = p.matcher(duration);
long milliseconds = 0;
if (m.find() && m.groupCount() == 4) {
int days = Integer.parseInt(m.group(1));
milliseconds += TimeUnit.MILLISECONDS.convert(days, TimeUnit.DAYS);
int hours = Integer.parseInt(m.group(2));
milliseconds += TimeUnit.MILLISECONDS
.convert(hours, TimeUnit.HOURS);
int minutes = Integer.parseInt(m.group(3));
milliseconds += TimeUnit.MILLISECONDS.convert(minutes,
TimeUnit.MINUTES);
int seconds = Integer.parseInt(m.group(4));
milliseconds += TimeUnit.MILLISECONDS.convert(seconds,
TimeUnit.SECONDS);
} else {
throw new ParseException("Cannot parse duration " + duration, 0);
}
return milliseconds;
}
我想将任何持续时间/周期字符串文字(以下面示例中显示的格式)解析为Java中的周期/持续时间实例。 所谓持续时间/周期,我指的是包含基于日期和基于时间的数量的时间量。在Java中,仅适用于基于时间的量,如秒、分钟和小时,而,仅适用于日期量,如年、月和日。 要解析的字符串并不总是包含所有量。 例子: < li> < li> < li> < li> 如果可能的话,我会怎么做?
问题内容: 我遇到了将“星期几”字符串转换为值的问题。我找不到包中内置的任何内容。 然后,我编写了这个简单的函数(满足了我的需求): 还有其他 建议 或 更惯用的 方式在Golang中执行此转换吗? 谢谢! 问题答案: 前言: 我在中发布了此实用程序,请参见。 是的,使用映射而不是数组,因此查找更快,更简单: 测试它: 输出(在Go Playgorund上尝试): 小费: 您甚至可以使用循环来安全
我有一个字符串时间格式。我没有找到任何格式来解析这个字符串值。有没有办法将这个字符串值转换为Gotime.Time? 编辑 - 这不是重复的问题。我知道如何解析,但我不知道我们可以使用时间格式包中列出的任何布局。这个答案清除了我的涂鸦。
基本上,我使用下面的代码将string解析为LocalDateTime,这在大多数情况下都很好。 然而,我遇到过秒数和毫秒数的情况,这是解析器失败并打印而不是的情况。 (注意,在我的代码中,我必须将字符串解析为< code>LocalDateTime,进行一些比较,然后在最后将< code>LocalDateTime打印为csv) 如何修复它以使其打印而不是? 仅供参考,我正在使用jdk10。
在ISO 8601中,持续时间的格式为<code>P[n]Y[n]M[n]DT[n]H[n]M[n]S。 例子: 20秒: 一年两个月三天四小时五分钟六秒: 问题: 给定一个包含iso 8601格式的持续时间的字符串。我想获得这段时间的总秒数。标准C 11中推荐的实现方式是什么? 备注: 例如,boost DateTime中有ptime from _ iso _ string(STD::strin
问题内容: 基本上,我使用下面的代码将字符串解析为LocalDateTime,在大多数情况下都可以正常工作。 但是,我遇到的情况是秒和毫秒00000,这是解析器失败并打印LocalDateTime 2018-03-01T09:16而不是的情况2018-03-01T09:16:00.000。 (请注意,在我的代码中,我必须将string解析为LocalDateTime,进行一些比较,然后最后输出Lo