aks*_*mit 15 java simpledateformat
我想格式化的字符串如下所示: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]
Run Code Online (Sandbox Code Playgroud)
但是我也需要解析AM/PM标记,当我将其添加到模式时,我收到一个异常.
无效的模式:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss a");
Run Code Online (Sandbox Code Playgroud)
我也试过这个也有同样的例外:
SimpleDateFormat sdf = SimpleDateFormat("M/d/yy h:mm:ss aa");
Run Code Online (Sandbox Code Playgroud)
例外:
java.text.ParseException: Unparseable date: "9/1/10 11:34:35 AM"
Run Code Online (Sandbox Code Playgroud)
我查看了http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#text上的API,但似乎无法找到我做错的地方.
有什么建议?
Mor*_*itz 32
一种可能性是您的默认值Locale具有不同的AM/PM符号.构建日期格式时,Locale除非您真的想使用系统的默认格式,否则应始终提供日期格式Locale,例如:
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm:ss a", Locale.US)
Run Code Online (Sandbox Code Playgroud)
现代答案:
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));
Run Code Online (Sandbox Code Playgroud)
这产生了LocalDateTime2010-09-01T11:34:35。不过要注意两位数的年份;DateTimeFormatter将假设 2000 年到 2099 年。对于我的生日,这将是不正确的。
我们仍然需要提供语言环境。由于 AM/PM 标记在英语以外的其他语言环境中几乎不使用,我认为Locale.ENGLISH这是一个相当安全的赌注。请用自己的代替。
其他答案在 2010 年和 2011 年都是很好的答案。在 2014 年,上述内容已经有效,我会更喜欢它。
| 归档时间: |
|
| 查看次数: |
31636 次 |
| 最近记录: |