2

'21Jul12'のような日付文字列を解析する方法。私は次の方法を試しました:

import org.apache.commons.lang.time._

DateUtils.parseDate("21Jul12", Array("ddMMMyy"));

しかし、エラーのために機能しません:

java.text.ParseException: Unable to parse the date: 21Jul21
    at org.apache.commons.lang.time.DateUtils.parseDateWithLeniency(DateUtils.java:359)
    at org.apache.commons.lang.time.DateUtils.parseDate(DateUtils.java:285)
    at .<init>(<console>:20)
    at .<clinit>(<console>)
    at .<init>(<console>:11)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
    at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
    at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
    at java.lang.Thread.run(Thread.java:662)

を使用してもjava.text.SimpleDateFormat、同様の例外が発生します。

java.text.ParseException: Unparseable date: "21Jul12"
    at java.text.DateFormat.parse(DateFormat.java:337)
    at .<init>(<console>:13)
    at .<clinit>(<console>)
    at .<init>(<console>:11)
    at .<clinit>(<console>)
    at $print(<console>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:704)
    at scala.tools.nsc.interpreter.IMain$Request$$anonfun$14.apply(IMain.scala:920)
    at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:43)
    at scala.tools.nsc.io.package$$anon$2.run(package.scala:25)
    at java.lang.Thread.run(Thread.java:662)
4

5 に答える 5

2

上記の日付を解析するためのコードは次のとおりです

System.out.println("ddMMMyy >>>" + DateUtils.parseDate("21Jul12", new String[] { "ddMMMyy" }));

System.out.println("yyyy-MM-dd >>>" + DateUtils.parseDate("2012-07-21", new String[] { "yyyy-MM-dd" }));

System.out.println("yyyy MMM dd >>>" + DateUtils.parseDate("2012 Jul 21", new String[] { "yyyy MMM dd" }));

とコンソール上の結果

ddMMMyy >>>Sat Jul 21 00:00:00 CEST 2012
yyyy-MM-dd >>>Sat Jul 21 00:00:00 CEST 2012
yyyy MMM dd >>>Sat Jul 21 00:00:00 CEST 2012

「2012年7月21日」を「ddMMMyy」で解析しようとしたかもしれません

System.out.println("ddMMMyy >>>" + DateUtils.parseDate("2012 Jul 21", new String[] { "ddMMMyy" }));

あなたのスタックを与える

java.text.ParseException: Unable to parse the date: 2012 Jul 21
at org.apache.commons.lang.time.DateUtils.parseDateWithLeniency(DateUtils.java:359)
at org.apache.commons.lang.time.DateUtils.parseDate(DateUtils.java:285)
at com.collibra.dgc.core.model.activity.impl.TestTree.testname(TestTree.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
于 2012-09-14T07:30:10.820 に答える
2

ロケールをLocale.en_USに明示的に設定すると機能します。デフォルトのロケール設定が原因でスローされる例外はLocale.CHINA

于 2013-01-24T08:26:42.937 に答える
0
String date="21JUL12";
        try {
            System.out.println(new   SimpleDateFormat("ddMMMyy").parse(date));
        }
        catch(ParseException ex) {
            ex.printStackTrace();
        }

上記のコードは私にこの出力を与えます:

Sat Jul 21 00:00:00 BST 2012
于 2012-09-14T09:23:04.010 に答える
0

日付の解析には消去プロセスを使用します。基本的には、(アプリケーションで)一般的に使用される日付形式の配列を使用し、例外をスローしないものが使用します。最もクリーンなソリューションではありませんが、機能します...

例えば

parse("2012 Jul 21", "ddMMMyy", "yyyy MMM dd");
parse("21Jul12", "ddMMMyy", "yyyy MMM dd");


public Date parse(String value, String... formats) throws ParseException {
    Date date = null;

    for (String format : formats) {
        try {
            date = new SimpleDateFormat(format).parse(value);
        } catch (ParseException exp) {
        }
    }

    if (date == null) {
        throw new ParseException(value + " is an unrecognized date format", 0);
    }

    return date;
}
于 2012-09-14T07:28:58.720 に答える
0
于 2018-02-16T22:01:24.603 に答える