无法使用AM / PM标记分析DateTime-string
我想格式化的string看起来像这样:String datetime =“9/1/10 11:34:35 AM”
SimpleDateFormat的以下模式工作:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss"); Date d = sdf.parse(datetime); System.out.println(d); Output> [Wed Sep 01 11:34:35 CEST 2010]
不过,我需要parsingAM / PM标记,当我添加到该模式,我收到一个exception。
模式不起作用:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");
我也尝试过这个例外:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");
例外:
java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"
我查看了http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#text的API,但似乎无法find我做错的地方。
有什么build议么?
一种可能是您的默认Locale
对于AM / PM具有不同的符号。 在构builddate格式时,除非确实要使用系统的默认Locale
,否则应始终提供Locale
Locale
,例如:
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)
我以下面的date为例,如果符合您的要求,则将格式化的date打印成24小时格式。
String inputdate="9/1/10 11:34:35 AM"; SimpleDateFormat simpleDateFormat=new SimpleDateFormat("dd/MM/yy hh:mm:ss aa",Locale.getDefault()); try { System.out.println(""+new SimpleDateFormat("dd/MM/yy HH:mm:ss",Locale.getDefault()).format(simpleDateFormat.parse(inputdate))); } catch (ParseException e) { e.printStackTrace(); }
如果您还有任何疑问,请回复。 谢谢。
如果您正在使用FreeMarker for Java并在此问题上使用以下代码。 我有这个问题,我的区域设置AM / PM为DE。 不知道为什么… <#setting locale="en_US">
现代答案:
String datetime = "9/1/10 11:34:35 AM"; LocalDateTime dt = LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("M/d/yy h:mm:ss a", Locale.ENGLISH));
这会产生一个2010-09-01T11:34:35的LocalDateTime
。 小心两位数年,但; DateTimeFormatter
将假设2000年到2099年。对于我的生日,这将是不正确的。
我们仍然需要提供语言环境。 由于AM / PM标记在英语以外的其他语言环境中很less使用,所以我认为Locale.ENGLISH
是一个相当安全的select。 请replace你自己的。
其他答案在2010年和2011年是好的答案。2014年已经是上述的有效,我会更喜欢它。