Java中的可读和可解析的日期格式
我想将日期对象保存为可读字符串(例如22/10/2009 21:13:14),该字符串也可以解析回日期对象 我尝试过很多方法,我能找到的最好的方法就是使用DateFormatter进行解析和格式化,但它遇到了一个挫折。格式化日期时,会丢失秒数信息。我试图找到是否有一个选项来格式化它并显示秒数(最好是毫秒级,因为这是Date对象允许的分辨率),但我没有找到 有什么想法吗?看看Java中的可读和可解析的日期格式,java,datetime,date,date-format,Java,Datetime,Date,Date Format,我想将日期对象保存为可读字符串(例如22/10/2009 21:13:14),该字符串也可以解析回日期对象 我尝试过很多方法,我能找到的最好的方法就是使用DateFormatter进行解析和格式化,但它遇到了一个挫折。格式化日期时,会丢失秒数信息。我试图找到是否有一个选项来格式化它并显示秒数(最好是毫秒级,因为这是Date对象允许的分辨率),但我没有找到 有什么想法吗?看看 可以基于一个非常简单的模式系统(包括秒甚至毫秒)格式化和解析日期。有点离题,但我总是觉得有必要提醒人们DateFormat
可以基于一个非常简单的模式系统(包括秒甚至毫秒)格式化和解析日期。有点离题,但我总是觉得有必要提醒人们DateFormat和SimpleDataFormat不是线程安全的!Sun文档清楚地说明了这一点,但我一直在野外寻找代码,人们将SimpleDateFormat粘贴在静态中…其他答案都很好 但是,在执行此类操作时,请选择一种格式,当编码为字符串时,可以正确排序。。。。“yyyy/MM/dd HH:MM:ss”可以。当软件工程师选择了一种不以明显、方便的方式排序的日期格式时,我总是感到惊讶 在将来的某个遥远的时刻,您将为您的开发伙伴节省大量的痛苦-将其视为良好的因果报应:-)ISO 8601 使用格式
- 它是灵活的,它包括秒和分数秒(如果有的话),但如果它们是0,也可以省略它们
- 它是标准的,所以越来越多的工具格式化和解析它。非常适合存储或数据交换的序列化 <> LI>就像
- 按照mikera在中的要求,只要年份在1000到9999之间的四位数范围内,字符串就会正确排序
、现代java日期和时间API以及Joda time的类默认解析ISO 8601,即不使用任何显式格式化程序,并从它们的java.time
方法生成相同的格式toString
java.time
的适度演示:
LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);
这将打印两条相同的行:
2009-10-22T21:13:14
2009-10-22T21:13:14
后者
System.out.println()
call再次隐式调用toString()
,因此这并不奇怪。如果您想做得简单一点,不必像大多数其他答案那样制作自己的日期格式,您可以利用以下默认格式:
这就是为什么每个人都应该用乔达的时间来代替,省得自己头疼:)我完全同意。另一方面,我希望Sun能够修复这些类,因此,如果没有其他问题的话,我就不必再坐在那里学习另一个“并发性经验教训”——与人一起提醒我。(哦,讽刺的是……我刚才在StackOverflow上做了完全相同的事情:-)Oracle(收购Sun的公司)已经修复了它。现代java日期和时间API java.time的类是线程安全的。忘记所有关于旧的
SimpleDateFormat
@Unihedron更新了链接。审阅者,请注意,这不是一个仅链接的答案-答案在没有链接的情况下仍然有意义,并且链接本身指向官方文档。“yyy/dd/MM”排序不正确。把2015/21/10, 2015/20/11和2015/22/11排序为2015/20/11, 2015/21/10,2015/22/11作为字符串。对不起,我的意思是YYYY/MM/DD。当这个答案是用2009写的时候,<代码> SimpleDateFormat <代码>就是我们的目的。事实证明,它很麻烦,幸运的是在2014年被java.time
、现代java日期和时间API及其DateTimeFormatter
类所取代。我建议您不要再使用SimpleDateFormat
。问题是转换日期对象,如果我想使用您的代码,那么我需要将日期转换为LocalDateTime,我该怎么做?谢谢@Royhabehan,谢谢您的关注。给定一个老式的Date
doString readableString=yourDate.toInstant().toString()代码>和相反的方式dateparsedback=Date.from(Instant.parse(readableString))代码>。字符串最后将有Z
,它表示UTC。在这种情况下,不要使用LocalDateTime
。
2009-10-22T21:13:14
2009-10-22T21:13:14
(new Date()).toInstant.toString();