2017-11-13 10 views
1

日付が有効であるかどうか、または日付にEDT/ESTがある場合、検証するAPIはありますか?私はJoda、Java SimpleDateFormatを試してみましたが、日付を解析できません。Java Date Validator withタイムゾーン

以下は、「2017/09/25 16:18:15.099 -0400 EDT」というサンプルフォーマットです。

何か助けていただければ幸いです。

おかげで、SK

+1

"私は日付を解析できません"とはどういう意味ですか?試してみるとどうなりますか?エラーメッセージはありますか?そして最も重要なことは、あなたが試したコードはどこにありますか? –

+0

文字列にオフセット(-0400)*と* 3文字のタイムゾーン省略形(EDT)がありますか?前にそれを見たことはありません。すべてが初めてです。 :-) –

答えて

0

あなたはドキュメントを読んでみてくださいましたか? the documentation of DateTimeFormatterから

z  time-zone name zone-name  Pacific Standard Time; PST 
x  zone-offset  offset-x  +0000; -08; -0830; -08:30; -083015; -08:30:15; 

ゾーン名:これは、タイムゾーンIDの表示名を出力します。文字の数が1つ、2つまたは3つの場合、短い名前は 出力です。 ...

オフセットXとx:これはパターン文字の数に基づいてオフセットをフォーマットします。 ... '+0130'のように、2つの文字が時と分を出力し、 コロンは付きません。 ...

それでは、これを試してみましょう:

ZonedDateTime zdt = ZonedDateTime.parse("2017/09/25 16:18:15.099 -0400 EDT", 
      DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss.SSS xx zzz", Locale.ENGLISH)); 

これは2017-09-25T16:18:15.099-04:00[America/New_York]ZonedDateTimeを生成します。 ZonedDateTime上記のコードで検証

はあなたの文字列からタイムゾーンをピックアップし、オフセットを無視します。両者が一致することを確認するために、同じ文字列をZonedDateTimeOffsetDateTimeに解析して比較することができます。後者のピックアップは、オフセットとタイムゾーンの省略形を無視するので、これは動作します:

String inputDateTimeWithZone = "2017/09/25 16:18:15.099 -0400 EDT"; 
    DateTimeFormatter formatterWithOffsetAndZone 
      = DateTimeFormatter.ofPattern("uuuu/MM/dd HH:mm:ss.SSS xx zzz", Locale.ENGLISH); 
    ZonedDateTime zdt = ZonedDateTime.parse(inputDateTimeWithZone, 
      formatterWithOffsetAndZone); 
    OffsetDateTime odt = OffsetDateTime.parse(inputDateTimeWithZone, 
      formatterWithOffsetAndZone); 
    if (! zdt.toOffsetDateTime().equals(odt)) { 
     System.err.println("Offset does not match: is " + odt.getOffset() 
       + ", but time zone " + zdt.getZone() + " implies offset " + zdt.getOffset()); 
    } 

あなたは

ESTとEDTはまた、オーストラリアについて使用することができることができる3つの文字のタイムゾーンの略語を避けます東部標準時および夏時間をそれぞれ示しています。 3文字の時間帯の略語は標準化されておらず、しばしばあいまいです。 地域/都市形式(アメリカ/ニューヨークなど)のタイムゾーンIDを持つ文字列を取得するか、省略形を取り除いてオフセットのみに頼った方が安全です。これは明確です。

現代のJavaの日付と時刻のAPI

今日はジョダ-時間の経過と確かに長い時代遅れのクラスSimpleDateFormatDate上、AKA JSR-310、java.timeをお勧めします。私にとっては、それは非常にうまく動作することが証明されています。そして、確かに古いクラスの驚きはありません。これはJava 8以降で組み込まれています。 Java 6または7を使用している場合は、最初はJoda-Timeを検討することができますが、外部依存関係を受け入れる準備ができている場合はjava.timeのバックポートをJava 6および7に移植してください。

+1

V.V私の問題を解決していただきありがとうございます。 – user8206257

+0

それを読んでうれしい、@ user8206257!目盛りの上に受け入れられたように気をつけてください。 [私の質問に誰かが答えるときに私はどうすればいいですか?](https://stackoverflow.com/help/someone-answers)を参照してください。私は貪欲に聞こえたくありません。習慣に入るかもしれませんが、いくつかのスタックオーバーフラワーは、あなたが答えを受け入れると本当に感謝しています。 –

関連する問題