如何在Java中将日期字符串转换为正确的格式?

有人可以向我解释我如何转换

2009-10-27 14:36:59.580250

27.10.2009,14:36

第一个日期以字符串forms提供,第二个日期也应该是一个字符串;)到目前为止,我还没有在Java中进行日期转换……

提前致谢!

您可以使用java.text.SimpleDateFormat 。 第一步是使用SimpleDateFormat根据第一个字符串的模式将第一个字符串解析为java.util.Date对象。 下一步是根据第二个字符串的模式将获得的java.util.Date对象格式化为字符串。 例如:

 String datestring1 = "2009-10-27 14:36:59.580250"; Date date1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(datestring1); String datestring2 = new SimpleDateFormat("dd.MM.yyyy HH:mm").format(date1); System.out.println(datestring2); 

编辑 :我已从第一个模式中删除了.SSSSSS部分,因为它失败了。 但在我看来,它理论上应该与"yyyy-MM-dd HH:mm:ss.SSS""yyyy-MM-dd HH:mm:ss.SSSSSS" ,但它将它们计算为秒! 我认为这是SimpleDateFormat的错误实现。 JodaTime可以完美地处理毫秒 / 微米 。

您可以使用SimpleDateFormat。 虽然没有微秒的格式规范(输入的最后一个片段),但是如果已经设法匹配配置的模式,则可以利用解析器忽略字符串其余部分的事实:

 SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm"); System.out.println(formatter.format(parser.parse("2009-10-27 14:36:59.580250"))); 

在这种情况下,解析器将忽略输入字符串的最后一部分“:59.580250”。

查看SimpleDateFormat 。 您可以使用它来解析和格式化 。 我建议使用一个SimpleDateFormat将上述内容解析为Date对象,然后使用第二个SimpleDateFormat格式化为String。

请注意,SimpleDateFormat会遇到线程问题,因此如果您在线程环境中使用它,要么创建新的SimpleDateFormats而不是使用静态版本,要么在Joda中使用相应但线程安全的类。

请记住,当你这样做时你会失去精确度。 根据您的具体应用,这可能也可能不重要。

如果您已将某个原始日期保存在某处,则这不是问题。 但是,如果源日期来自瞬态源(例如,从某种物理传感器流入),那么在某处保留临时Date对象(SimpleDateFormat #parse(String)的输出)可能是个好主意。

我以为我会指出这一点。