将字符串解析为日期戳不起作用。 Java

问题描述:

我想解析格式为MMM-dd-yyyy的字符串为Timestamp。我这样做如下:将字符串解析为日期戳不起作用。 Java

String dateto = "Dec-01-2013"; 
try{ 
    DateFormat datetoDF = new SimpleDateFormat("MMM-dd-yyyy"); 
    Date datetoD = (Date)datetoDF.parse(dateto); 
    datetoTS = new Timestamp(datetoD.getTime()); 
} 
catch(ParseException e) 
{ 
    log.error("RegisteredUserDataProvider:getFilteredUsers:ParseException: " + e.getMessage()); 
    String stackTrace = ExceptionUtils.getStackTrace(e); 
    log.error(stackTrace); 
} 

它为什么只适用于3月(例如2013年3月1日)? 当我给任何其他日期与其他月份我拿到

java.text.ParseException: Unparseable date: "Dec-01-2013" 

我检查它与每月组变量: “DEC-01-2013”​​,“月-01-2013”​​,“ Oct-01-2013“,”Sep-01-2013“,”Aug-01-2013“,”Jul-01-2013“,”Jun-01-2013“,”May-01-2013“,”Apr- 01-2013“,”Feb-01-2013“,”Jan-01-2013“和”Mar-04-2013“。它仅适用于Mar。任何想法为什么?

+3

为我工作。您的确切代码。 'sysout(datetoTS)'给了** 2013-12-01 00:00:00.0 ** – SudoRahul 2013-03-07 11:21:46

+0

奇怪。所以我必须深入挖掘。 – kmb 2013-03-07 11:27:02

+1

@ R.J它的语言环境引起了问题。您的默认区域设置可能是英文。 – Jayamohan 2013-03-07 11:29:37

看起来像你的默认Locale是不同的。

DateFormat datetoDF = new SimpleDateFormat("MMM-dd-yyyy", Locale.ENGLISH); 

您的默认语言环境可能无法识别单词“一月”,“二月”等

您可以使用此。

String dateto = "Dec-01-2013"; 
Date datetoD = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(dateto); 
datetoTS = new Timestamp(datetoD.getTime()); 
+0

这是否为您正确解析?它工作吗? – Jayamohan 2013-03-07 11:37:29

所有关于本地或你是通过日期Dec -01-2013与空间。 没有如Dec-01-2013空间提供适当的日期,并尝试打印Locale.getDefault()如果您的默认设置有点像韩国那么肯定你会得到这个异常然后尝试使用像

DateFormat datetoDF = new SimpleDateFormat("MMM-dd-yyyy",Locale.ENGLISH);