我想将 Date 对象保存为可读字符串(例如 22/10/2009 21:13:14),该字符串也可以解析回 Date 对象。

我尝试了很多方法,我能找到的最好的方法是使用 DateFormater 进行解析和格式化,但它有一个挫折。当您格式化日期时,您会丢失秒信息。我尝试查找是否有一个选项可以对其进行格式化并显示秒数(最好是毫秒级别,因为这是 Date 对象允许您拥有的分辨率),但我没有找到。

有任何想法吗?

有帮助吗?

解决方案

看一看 java.text.SimpleDateFormat中

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back

其他提示

SimpleDateFormat 可以格式化和解析基于一个非常简单的图案的系统,包括第二和甚至毫秒上的日期。

其他答案都是很好的。

但做这种事情时,挑选的格式正确排序:当作为字符串编码....“YYYY / MM / DD HH:MM: SS”是好的。它总是astounds我,当软件工程师挑不中明显的,方便的方式进行排序的日期格式。

您会在未来的某个遥远的点保存你的同胞开发商很多痛苦的 - 认为它是好人缘: - )

一个有点偏离主题,但我总觉得有必要提醒的是,日期格式和SimpleDateFormat的是不是线程安全的人! Sun文档中明确指出这一点,但我一直寻找的代码在野外,人们在静态贴的SimpleDateFormat ...

ISO 8601

使用 ISO 8601 格式。

  • 它很灵活,它包括秒和秒的小数部分(如果有的话),但如果它们是 0,你也可以将它们省略。
  • 它是标准的,因此越来越多的工具对其进行格式化和解析。非常适合存储或数据交换的序列化。
  • 它就像 2009-10-22T21:13:14, ,我应该说它非常易于人类阅读(尽管 T 中间表示时间开始的部分一开始可能会感觉不寻常)。
  • 字符串正确排序,正如 mikera 中所要求的那样 另一个答案, ,只要年份在 1000 到 9999 的四位数范围内。
  • 的班级 java.time, 、现代 Java 日期和时间 API 以及 Joda Time 的 API 将 ISO 8601 解析为默认值,即没有任何显式格式化程序,并从它们生成相同的格式 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() 隐式调用 toString() 再次,所以这不应该令人惊讶。

如果你想要做的更简单一点,从制作自己的日期格式,大多数其他的答案涉及幸免,你可以充分利用其在的 java.time.Instant

(new Date()).toInstant.toString();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top