我有一个通过调用toString类Date实例的方法获得的字符串.
如何从此字符串中获取Date对象?
Date d = new Date();
String s = d.toString;
Date theSameDate = ...
Run Code Online (Sandbox Code Playgroud)
更新
我尝试使用SimpleDateFormat,但是我知道java.text.ParseException: Unparseable date
你能告诉我Date.toString()生成的日期格式吗?
fle*_*esk 16
如果您的真正目标是Date为某种自定义持久性或数据传输序列化对象,那么一个简单的解决方案是:
Date d = new Date();
long l = d.getTime();
Date theSameDate = new Date(l);
Run Code Online (Sandbox Code Playgroud)
小智 12
你可以这样做
Date d = new Date();
String s = d.toString;
Date theSameDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(s);
Run Code Online (Sandbox Code Playgroud)
Date课程。现代 Java 日期和时间 API 使用起来java.time要好得多。您需要的课程可能是Instant(这取决于您更确切的要求)。这两点很好地相辅相成:
Instant i = Instant.now();
String s = i.toString();
Instant theSameInstant = Instant.parse(s);
Run Code Online (Sandbox Code Playgroud)
现代类的toString方法产生 ISO 8601 格式(例如,2018-01-11T10:59:45.036Z),并且它们的parse方法读回相同的格式。所以这个片段就是你所需要的,你会得到一个与第一个相同的时刻,精度为纳秒。
如果你无法控制你的字符串,你得到的结果Date.toString(),格式模式字符串Sedalb的答案可与java.time太:
DateTimeFormatter dtf
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
Date d = new Date();
String s = d.toString();
Instant nearlyTheSameInstant = ZonedDateTime.parse(s, dtf).toInstant();
Run Code Online (Sandbox Code Playgroud)
提供语言环境至关重要。否则将使用 JVM 的默认语言环境,如果不是英语,解析将失败。在最坏的情况下,您会看到您的代码运行良好多年,但有一天有人在具有不同区域设置的计算机或设备上运行它时,它会突然中断。
从点jambjo的回答仍然适用:在使用的三个和四个字母时区的缩写Date.toString()是很经常模棱两可,所以没有保证时区正确解释,并再次,它会在不同的不同的JVM解释。
最后,Date.toString()不呈现Date保持的毫秒数,这会导致高达 999 毫秒的不准确度。如果使用字符串 from Date.toString(),我们无能为力(这就是我命名变量的原因nearlyTheSameInstant)。