繁体   English   中英

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

[英]How to convert a date String into the right format in Java?

有人可以给我解释一下我该如何转换

2009-10-27 14:36:59.580250

进入

27.10.2009,14:36

第一个日期可以作为字符串使用,而第二个日期也可以作为字符串;)到目前为止,我还不太喜欢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将其格式化为字符串。

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

执行此操作时请记住,您将失去精度。 取决于您的特定应用,这可能会或可能不会重要。

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

只是以为我会指出这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM