JAVA怎么把date,关于java:如何将Date.toString转换回Date?

我有一个通过调用类Date实例的toString方法获得的字符串。

如何从该字符串获取Date对象?

Date d = new Date();

String s = d.toString;

Date theSameDate = ...

更新

我尝试使用SimpleDateFormat,但得到java.text.ParseException: Unparseable date

您能告诉我Date.toString()生成的日期格式吗?

尝试使用SimpleDateFormat进行解析。

不要使用字符串。 保留Date对象,仅在需要时转换为String。

提供有关您真正想要实现的目标的上下文可能是一个好主意。

不要使用Date。 现代方法对字符串使用java.time.Instant和标准ISO 8601格式。 请参阅Ole V.V.的正确答案。

如何将这种格式的日期(2010年7月13日星期二00:00:00 CEST)转换为Java日期(该字符串来自alfresco属性)

如果您的真正目标是为某种定制的持久性或数据传输序列化Date对象,那么一个简单的解决方案是:

Date d = new Date();

long l = d.getTime();

Date theSameDate = new Date(l);

仅供参考:麻烦的Date类现在已成为旧类,由Instant和其他java.time类代替。 请参阅Ole V.V的《答案》中的现代方法。

你可以这样

Date d = new Date();

String s = d.toString;

Date theSameDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(s);

当使用bean构造函数将Java Date对象与JSONObjects相互转换时,此方法还可以与org.json库一起使用,因为在构造JSONObjects时,它使用Date.toString()。 感谢您这样做,它正是我要查找的SimpleDateFormat的格式。

仅供参考,这里使用的麻烦的旧类现在已成为旧版,由java.time类取代。

如果您的真正目标是对日期和时间进行序列化和反序列化(例如,用于数据传输或持久性),请序列化为ISO 8601(日期和时间数据的标准格式)。

跳过过长的Date类。称为java.time的现代Java日期和时间API更好用。您需要的类可能是Instant(这取决于您的更确切的要求)。

两点很好地结合在一起:

Instant i = Instant.now();

String s = i.toString();

Instant theSameInstant = Instant.parse(s);

现代类的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();

提供语言环境至关重要。否则,将使用JVM的默认语言环境,如果不是英语,则解析将失败。在最坏的情况下,您将看到您的代码可以正常运行很多年,并且突然间,有一天有人在具有不同区域设置的计算机或设备上运行该代码时,它会突然中断。

jambjo答案的要点仍然适用:Date.toString()中使用的三个字母和四个字母的时区缩写经常是模棱两可的,因此不能保证时区的解释正确,并且在不同的JVM上,时区的解释也不同。 。

最后,Date.toString()不会呈现Date所保持的毫秒数,这会导致最多999毫秒的不准确性。如果使用Date.toString()中的字符串,我们将无能为力(这就是为什么我将变量命名为nearlyTheSameInstant的原因)。

tl; dr Instant.parse( Instant.now().toString() )

看一下SimpleDateFormat#parse()。它应该提供您要寻找的功能。

该类现在已被DateTimeFormatter淘汰。

Date theSameDate = new Date(Date.parse(s));

由于某些不太明显的原因,这并不是一个特别好的主意。您可以在API文档中找到有关解析方法的详细信息。一个问题是时区缩写词模棱两可,因此解析器可能无法解释正确的时区。

Date.parse()也很久以前不推荐使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值