如何知道字符串的格式是否与输入值的格式相同?在Java中
首先,感谢,长老开发者,我是超级新手...和抱歉,我英语说得不好....所以..明白我一句..如何知道字符串的格式是否与输入值的格式相同?在Java中
我想了解比较格式和DateStringFormat的方式。
例子:
boolean CompareFormat(String inputValue, DateTimeFormatter format) {
String gettedFormat = ~~~.getFormat(inputValue);
if (format.toString().equals(gettedFormat)) return true;
else return false;
}
这只是,我想......
- 得到格式化的输入字符串值。
- 变化格式化值格式化 (我认为,改变价值变动重新格式化它不会改变 /inputValue将:19900202T0001 - >更改格式(yyyyMMddThhmm) - >结果:19900202T0001)
- inputValue的是否相同将值更改为格式然后返回true;否则 错误;
,但我不能,我想结果。
我试图
System.out.println("format : " + format);
System.out.println("value : "+value);
LocalDate changedDateString = LocalDate.parse(value, formatter);
System.out.println("changed Value : " + changedDateString);
System.out.println("changed Value : " + formatter.format(changedDateString));
输出:
format : yyyyMMdd'T'hhmm
value : 20170616T0023
changed Value : 2017-06-16
18:19:14.053 ERROR ServiceTask - Exception caught.
我不知道你想获得恰恰是,但我想我会在建议抛出。为了检查你的布尔方法给定的输入字符串是否与给定的格式相匹配,我觉得很容易检查是尝试解析与格式字符串,看看它是否成功:
public static boolean compareFormat(String inputValue, DateTimeFormatter format) {
try {
format.parse(inputValue);
// parsing succeeded; so the format seems to match
return true;
} catch (DateTimeParseException dtpe) {
return false;
}
}
这样使用,例如:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd'T'hhmm");
System.out.println(compareFormat("20170616T0023", dtf));
这将打印true
。另一方面,compareFormat("2017-06-16", dtf)
产生错误。
该方法不检查我在评论中触及的方面,无论输入是LocalDate
(不含小时和分钟)还是LocalDateTime
(如示例中所示)或其他内容。
您问题中的代码示例会抛出java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: ClockHourOfAmPm
,我认为这是行18:19:14.053 ERROR ServiceTask - Exception caught.
的原因。这是因为你正试图与包括hh
和mm
格式化格式化LocalDate
。 hh
意味着时钟小时-的-AM-PM(1-12)和通常与AM/PM标记如“9:15 AM”使用。无论如何,一个LocalDate
只包含一个日期,没有时间也没有分,所以它不能与你DateTimeFormatter
进行格式化。
ahh @Ole V.V.非常感谢你的回答。我可以理解一点:)哈哈哈..不能使用LocalDate作为小时和分钟。 – Jays
有您的格式字符串'yyyyMMdd'T'hhmm'和您所选择的类型,'LocalDate'之间的不匹配。 “LocalDate”只是一个日期,它不包括一天中的时间(小时和分钟)。所以要么使用'LocalDateTime',要么忽略格式模式字符串中的'HHmm'。 BTW,这应该有可能通过23 –
是资本'HH'用于小时的间隔0,您将能够认识到可能的格式数量有限,并使用相应的格式化。您无法识别和处理所有可能的格式。典型的例子是11/06/2017:有些意味着11月6日,6月11日。 –
@Ole V.V.啊......谢谢你。我明白你说了什么。我是以其他方式解决的。再次感谢你。 – Jays