2017-06-16 68 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