次のコードを試しているときに解析例外が発生します。
String date="Sat Jun 01 12:53:10 IST 2013";
SimpleDateFormat sdf=new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
Date currentdate;
currentdate=sdf.parse(date);
System.out.println(currentdate);
例外:
スレッド「main」の例外Java.text.ParseException:解析不能な日付:com.ibm.icu.text.DateFormat.parse(DateFormat.Java:510)の「Sat Jun 01 12:53:10 IST 2013」
入力:Sat Jun 01 12:53:10 IST 2013
期待される出力:Jun 01,2013 12:53:10
これを解決するには?
あなたのパターンは入力文字列にまったく対応していません...それが機能しないことは驚くことではありません。これはおそらくよりうまくいくでしょう:
SimpleDateFormat sdf = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
Locale.ENGLISH);
次に、必要な形式で印刷するには、2番目のSimpleDateFormatが必要です。
Date parsedDate = sdf.parse(date);
SimpleDateFormat print = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
System.out.println(print.format(parsedDate));
ノート:
String date="Sat Jun 01 12:53:10 IST 2013";
SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
Date currentdate=sdf.parse(date);
SimpleDateFormat sdf2=new SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
System.out.println(sdf2.format(currentdate));
パターンが間違っています
String date="Sat Jun 01 12:53:10 IST 2013";
SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");
Date currentdate;
currentdate=sdf.parse(date);
System.out.println(currentdate);
形式を次のように更新します。
SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");
そのような形式ではなく、 ISO 8601 標準形式を使用して、日時値をテキストとして交換します。
Java.timeクラスは、文字列の解析/生成時にデフォルトで標準ISO 8601形式を使用します。
continent/region
、 America/Montreal
、Africa/Casablanca
など、 適切なタイムゾーン名 をPacific/Auckland
の形式で指定します。 EST
やIST
などの3〜4文字の略語は、notの真のタイムゾーンであり、標準化されておらず、一意(!)でもないため使用しないでください。
IST
は、アイスランド標準時、インド標準時、アイルランド標準時などを意味します。 Java.timeクラスは、このあいまいさに対する論理的な解決策がないため、単に推測するだけです。
最新のアプローチでは、Java.timeクラスを使用します。
入力文字列に一致するフォーマットパターンを定義します。
String input = "Sat Jun 01 12:53:10 IST 2013";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
zdt.toString():2013-06-01T12:53:10Z [Atlantic/Reykjavik]
入力がアイスランド向けでない場合は、文字列を事前解析して適切なタイムゾーン名に調整する必要があります。たとえば、入力がインド向けであることが確実な場合は、IST
をAsia/Kolkata
に変更します。
String input = "Sat Jun 01 12:53:10 IST 2013".replace( "IST" , "Asia/Kolkata" );
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
zdt.toString():2013-06-01T12:53:10 + 05:30 [アジア/コルカタ]
Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
、および SimpleDateFormat
などの厄介な古い legacy 日時クラスに取って代わります。
メンテナンスモード になった Joda-Time プロジェクトは、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracle Tutorial を参照してください。また、多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 31 です。
Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列やJava.sql.*
クラスは必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、Java.timeを追加のクラスで拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。ここでは、 Interval
、 YearWeek
、 YearQuarter
、および more 。
解析エラーなしで現在の日付を取得する簡単な解決策を見つけました。
Calendar calendar;
calendar = Calendar.getInstance();
String customDate = "" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH);
String date="Sat Jun 01 12:53:10 IST 2013";
SimpleDateFormat sdf=new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
このパターンは、集計しない入力文字列であり、これはexceptionになります。
作業を完了するには、次のpatternを使用する必要があります。
E MMM dd HH:mm:ss z yyyy
次のコードは、例外をスキップするに役立ちます。
SimpleDateFormat
は使用済みです。
String date="Sat Jun 01 12:53:10 IST 2013"; // Input String
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy"); // Existing Pattern
Date currentdate=simpleDateFormat.parse(date); // Returns Date Format,
SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("MMM dd,yyyy HH:mm:ss"); // New Pattern
System.out.println(simpleDateFormat1.format(currentdate)); // Format given String to new pattern
// outputs: Jun 01,2013 12:53:10
パターン(DD-MMM-YYYY)とparse( "29-11-2018")メソッドの入力を確認してください。解析メソッドへの入力は、DD-MMM-YYYY i、eに従う必要があります。 2019年8月21日
私のコードで:
String pattern = "DD-MMM-YYYY";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
try {
startDate = simpleDateFormat.parse("29-11-2018");// here no pattern match
endDate = simpleDateFormat.parse("28-AUG-2019");// Ok
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}