2017-06-16 24 views
0

首先,感谢,长老开发者,我是超级新手...和抱歉,我英语说得不好....所以..明白我一句..如何知道字符串的格式是否与输入值的格式相同?在Java中

我想了解比较格式和DateStringFormat的方式。

例子:

boolean CompareFormat(String inputValue, DateTimeFormatter format) { 
    String gettedFormat = ~~~.getFormat(inputValue); 
    if (format.toString().equals(gettedFormat)) return true; 
    else return false; 
} 

这只是,我想......

  1. 得到格式化的输入字符串值。
  2. 变化格式化值格式化 (我认为,改变价值变动重新格式化它不会改变 /inputValue将:19900202T0001 - >更改格式(yyyyMMddThhmm) - >结果:1​​9900202T0001)
  3. 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. 
+1

有您的格式字符串'yyyyMMdd'T'hhmm'和您所选择的类型,'LocalDate'之间的不匹配。 “LocalDate”只是一个日期,它不包括一天中的时间(小时和分钟)。所以要么使用'LocalDateTime',要么忽略格式模式字符串中的'HHmm'。 BTW,这应该有可能通过23 –

+1

是资本'HH'用于小时的间隔0,您将能够认识到可能的格式数量有限,并使用相应的格式化。您无法识别和处理所有可能的格式。典型的例子是11/06/2017:有些意味着11月6日,6月11日。 –

+0

@Ole V.V.啊......谢谢你。我明白你说了什么。我是以其他方式解决的。再次感谢你。 – Jays

回答

1

我不知道你想获得恰恰是,但我想我会在建议抛出。为了检查你的布尔方法给定的输入字符串是否与给定的格式相匹配,我觉得很容易检查是尝试解析与格式字符串,看看它是否成功:

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.的原因。这是因为你正试图与包括hhmm格式化格式化LocalDatehh意味着时钟小时-的-AM-PM(1-12)和通常与AM/PM标记如“9:15 AM”使用。无论如何,一个LocalDate只包含一个日期,没有时间也没有分,所以它不能与你DateTimeFormatter进行格式化。

+0

ahh @Ole V.V.非常感谢你的回答。我可以理解一点:)哈哈哈..不能使用LocalDate作为小时和分钟。 – Jays

相关问题