2016-04-10 48 views
0

我有这个20160407 4:30 pm数据的时间字符串,我想将它转移到时间戳。Java的无法解析的日期例外年月日H:M一

Timestamp timestamp = null; 
try { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd h:m a"); 
    //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
    Date parsedDate = dateFormat.parse("20160407 4:30 pm"); 
    timestamp = new java.sql.Timestamp(parsedDate.getTime()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

我得到错误:

java.text.ParseException: Unparseable date: "20160407 4:30 pm " 
+3

做工精细这里,与Java 8.什么是你的locale?也许'下午'不是你在你的语言环境中说'pm'的方式。尝试使用Locale.US而不是默认的语言环境。另外,发布异常的完整堆栈跟踪。 –

+0

@JBNizet与你同意。应该检查本地。 –

回答

4

我目前在美国,你的代码运行正常,如果我不指定区域。然而,当我明确地将我的语言环境更改为中国时,我们使用'下午'作为'pm'和'上午'作为'am',所以如果在代码中将'pm'更改为'下午'它会工作。

Locale locale = Locale.CHINA; 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd h:m a", locale); 

Date parsedDate = dateFormat.parse("20160407 4:30 pm"); 

因此,请检查您的默认语言环境是Locale locale = Locale.getDefault()

另外,我建议你使用新的Java日期和时间API了。

+0

格式化程序类将使用您指定的模式,即使这不是区域设置默认值。我没有理由投票。 – duffymo

+1

@duffymo是的,它会,然后在这个地方它可能会失败,这就是为什么有一个错误。你可以看看:[自定义格式](https://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html) –

+1

@duffymo错误解析,因为他正试图解析字符串时发生作为一个日期,而不是在日期格式中对字符串 –

相关问题