有人可以向我解释我如何转换
2009-10-27 14:36:59.580250
进入
27.10.2009,14:36 ?
第一个日期以字符串形式提供,第二个日期也应该是字符串;)到目前为止,我还没有在Java中进行日期转换......
提前致谢!
答案 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>
我以为我会指出这一点。