3

Java 7 を使用しており、フラット ファイルから日付を解析しようとしています。

このファイルの日付は、「2012 年 3 月 30 日 14:05:02」という形式になっています。これを変更することはできません。別のソフトウェアに依存しています。

javadocによると、この形式は「dd-MMM-yyyy HH:mm:ss」です。

しかし、理由は不明ですが、これは機能していません。

問題を再現する小さなプログラムを次に示します。

package javaapplication2;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JavaApplication2 {

    public static void main(String[] args) {
        Date d = null;
        try {
            SimpleDateFormat df;
            df = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.FRANCE);
            d = df.parse("30-Mar-2012 14:05:02");

        } catch (ParseException ex) {
            System.err.println(ex.getMessage());
        }
        if (d != null) {
            System.out.println(d.toString());
        }
    }
}

元の日付の「3 月」の後に「s」を付けても問題は発生しません (「火星」はフランス語で 3 月の正式名称です。これは「3 月」と Locale.US の形式でも機能します)。

私は何か間違ったことをしていますか? これをそのようにすることは本当に可能ですか?これについてJavaに文書化されていない問題がありますか?

4

2 に答える 2

2

解説はこちら

    DateFormatSymbols dfs = new DateFormatSymbols(Locale.FRENCH);
    for (String s : dfs.getShortMonths()) {
        System.out.print(s + " ");
    }

出力

janv. f?vr. mars avr. mai juin juil. ao?t sept. oct. nov. d?c.  

ご覧のとおり、mars = mars の短縮形です。

于 2013-06-22T01:56:45.770 に答える
1

コードをテストする

        Calendar calendar = Calendar.getInstance();
        calendar.set(2012, 2, 30);

    try {
        SimpleDateFormat df;
        df = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.FRANCE);
        String s=df.format(calendar.getTime());
        System.out.println(s);

        }

結果の出力: 2012 年 3 月 30 日 23:17:46

marsしたがって、代わりに期待していますMar

「3 月」は Locale.US です。

于 2013-06-22T02:19:43.360 に答える