2017-06-16 21 views
0

まず、おかげで、エルダーDeveloperで、私はスーパー初心者だ...と残念私はよく英語を話す.... ..だから私の文を理解していない...文字列の形式が入力値の形式と同じかどうかをどのように知ることができますか? Javaの

私が欲しいですaの形式を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) - >結果:19900202T0001)
  3. inputValueでは同じである場合値をフォーマットに変更してからtrueを返します。 else false;

私は思った結果を得ることができません。

私は

  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'を除外してください。ところで、0〜23の間の時間は、おそらく大文字の「HH」になるはずです。 –

+1

可能なフォーマットの数は限られていますが、適切なフォーマッタを使用することができます。すべての可能なフォーマットを認識して処理することはできません。古典的な例は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)はfalseを返します。

この方法では、入力がLocalDate(時間と分なし)またはLocalDateTime(例のように)などのように表示されているかどうかはコメントで確認できません。

あなたの質問のコード例は、を投げます。これは、18:19:14.053 ERROR ServiceTask - Exception caught.の理由です。これはLocalDateを、hhmmを含むフォーマッタでフォーマットしようとしているためです。 hhは時計の午前 - 午後(1〜12)を意味し、通常は "9:15 AM"のように午前/午後のマーカーで使用されます。とにかくLocalDateには日付(時間も分も含まない)しか含まれていないので、DateTimeFormatterでフォーマットすることはできません。

+0

ahh @Ole V.V.非常にあなたの答えに感謝します。私は少し理解することができます:)hahaha ..時間と分としてLocalDateを使用することはできません。 – Jays

関連する問題