2013-06-22 21 views
3

我正在使用java 7,我试图从平面文件中解析日期。Java 7 SimpleDateformat滥用或问题?

我这个文件的日期格式为“30-Mar-2012 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()); 
     } 
    } 
} 

当我在原来的日期把一个“S”,“月”后,该问题不会发生(“火星”是三月在法国的全名,这也与“三八”工作, Locale.US格式)。

上午我做错了什么? 真的有可能这样做吗? 我在那里有一个java的无证问题吗?

+0

什么不起作用? – JHS

+0

df.parse引发异常 – OOProg

+0

是否给法语的其他月份(短名称)问题? – JHS

回答

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. 

,你可以看到火星火星=缩写形式。

+0

感谢您的快速回答。 我已经试过这个工作(我编辑了我的第一条消息) 问题是我不能在我的原始文件中更改日期格式。 – OOProg

+0

好的,看到新的答案 –

+0

所以我想我的约会并没有与法国当地人合作。我需要确认,但我想我会使用Locale.US。 感谢您的回答 – OOProg

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

'月' 是Locale.US

+0

是的,因为法文缩写与我的输入格式不符。我将使用Locale.US感谢您的回答。 – OOProg