2

次のJavaコードは、を使用して日付(時間部分を含む)2009-01-28-09:11:12を解析するだけSimpleDateFormatです。それを見てみましょう。

final public class Main
{
    public static void main(String[] args)
    {            
        try
        {
            DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
            Date d = df.parse("2009-01-28-09:11:12");
            System.out.println(d);
        }
        catch (ParseException ex)
        {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

上記のコードで(解析後)表示される日付(時間付き)は次のとおりです。

Sun Nov 30 22:07:51 IST 2008

日付を解析しようとしていますが2009-01-28-09:11:12。やや不安定に見えます。なぜそれを解析するのですか?

4

3 に答える 3

5

日付形式は次のようにすべきではありません。

DateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");

この形式に一致させるには:

Date d = df.parse("2009-01-28-09:11:12");

理由については、これごとに:

パーサーは実際にはこれらを数値と見なします。トリックは、-が数値の一部であり、負の数を表すことです。だからあなたがそうするなら:

df.parse("2009-01-02-00:00:00")

それは与えます:

Mon Dec 01 00:02:00 EST 2008

これにより、2009がyyyyとして解析され、次に-0がMMとして解析され(月が1から始まるため、前月)、1がddとして解析されます。

DateFormatでの解析によると:

デフォルトでは、解析は寛大です。入力がこのオブジェクトのformatメソッドで使用される形式ではないが、日付として解析できる場合、解析は成功します。クライアントは、setLenient(false)を呼び出すことにより、フォーマットの厳密な順守を主張できます。

2009/01/02 12:34:56のような形式が好きな場合は、オプションがある場合は、ダッシュの代わりにスラッシュを使用する方がよいと思います。これ:

df.parse("2009/01/02-00:00:00")

例外をスローします:

ERROR java.text.ParseException:
Unparseable date: "2009/01/02-00:00:00"

/私はそれがDateFormatによる数の除算と見なされない非常に良いことであると結論付けることができるだけです...

于 2012-01-28T17:20:23.693 に答える
2

さて、あなたはあなたが実際解析しているフォーマットを定義することができます...

于 2012-01-28T17:21:05.133 に答える
1

日付は、デフォルトで寛容モードで解析されます。これは、うるう年でない場合、2月29日を3月1日として解析するなどのエラーを許容することを意味します。あなたがそれを解析するように頼んでいるのは2009年の-1月の-28日であり、それはあなたが求めているものを正確にあなたに与えようとします。

この動作をオフにするには、format.setLenient(false)を呼び出します。次に、実際の日付ではないものを解析しようとすると、dateformatは例外をスローします。

于 2012-01-28T17:32:32.877 に答える