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

时间:2009-11-17 13:30:33

标签: java string datetime

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

2009-10-27 14:36:59.580250

进入

27.10.2009,14:36

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

提前致谢!

4 个答案:

答案 0 :(得分:8)

您可以使用java.text.SimpleDateFormat。第一步是根据第一个字符串的模式使用java.util.Date将第一个字符串解析为SimpleDateFormat对象。下一步是根据第二个字符串的模式将获得的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与这些模式完美地处理毫秒/微米。

答案 1 :(得分:3)

您可以使用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”。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

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

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

我以为我会指出这一点。