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());
        }
    }
}

当我在原始日期的“Mar”之后加上“s”时,问题不会发生(“Mars”是法语中 March 的全名,这也适用于格式中的“March”和 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);

        }

结果打印:30-mars-2012 23:17:46

所以它期待mars而不是Mar

'Mar' 是 Locale.US

于 2013-06-22T02:19:43.360 回答