我需要以各种精度级别解析Java中ISO8601格式的字符串。我需要解析的字符串的一些示例是:
在没有字段的情况下,我可以自由假定适用的最低有效值(例如,如果缺少月份,则可以假定一月,如果缺少日期,则可以假定为月的第一天,如果时间是缺少假定午夜)
我已经搜索了SO,发现的所有示例都假定我事先知道确切的格式。
好吧,这花了我比预期更长的时间。唯一有效的解析器是:
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR, 4)
.appendPattern("[['-']MM[['-']dd[['T']HH[[':']mm[[':']ss['.'SSS]]]]]]")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.parseDefaulting(ChronoField.NANO_OF_SECOND, 0)
.toFormatter();
String[] s = {
"2018",
"2018-10",
"2018-10-15",
"2018-10-15T12:00",
"2018-10-15T12:00:30",
"2018-10-15T12:00:30.123",
"20181015",
"201810151200",
"20181015120030",
"20181015120030.123",
"20181015T12:00:30.123"
};
for (String line : s) {
System.out.println(LocalDateTime.parse(line, dtf));
}
问题是yyyy
创建一个ValueParser(minWidth=4, maxWidth=19, SignStyle.PAD_EXEEDS)
解析日期的a
20181015
作为year=20181015
示例。因此我们必须将数字宽度限制year
为4。
该文档指出:
年 :字母的数目确定最小字段宽度,在该最小字段宽度以下使用填充。
但未指定最大宽度。
当我使用之类的东西时,它仍然会触发,就像连字符无效一样。我尝试了和
我有一个来自服务器的响应。需要使用分隔符“=”分割响应,但对于其中一个参数,其值中也需要包含“=”。示例:响应:Name=Hi 一旦我得到这个响应,我就用 我尝试了不同的包含先行分隔符正则表达式的方法,但都不起作用。
期望的行为 我有一个输入验证,除其他外,测试长度(
问题内容: 我正在尝试编写一个MySQL查询,以获取给定日期之间所有月份的每月平均值。我的想法是这样的: 查询,类似 您看到,在2009年4月没有输入任何值,但是我希望它在输出中显示为0、0值。关于如何实现这一目标的任何想法?可以在MySQL中完成吗? 问题答案: 我同意Lieven的回答,请创建一个表,其中包含您可能需要的所有月份,并使用该表将“ LEFT JOIN”到结果表。请记住,这是一个很
问题内容: 我想匹配所有URL,但从与该正则表达式匹配的beeing中排除图像URL:jpe?g | gif | png。 \ b(?:https?| ftp | file):// [-A-Z0-9 +&@#/%?=〜 | $!:,。;] * A-Z0-9 +&@# /%=〜 | $ 问题是带有排除项的部分不能像这样工作:(?!jpe?g | gif | png) 有人对此有解决方案吗? 例: 不
我在这里有我的日期来自我的API,我试图在其中解析到。我使用intl包尝试了以下方法,但我遇到了错误 未处理的异常:格式异常:尝试从 2020/07/07 09:47:54 在位置 20 读取 有人知道这里出了什么问题吗?