Java Date.parse还是新的Date(String)替换?

时间:2011-05-07 14:47:12

标签: java parsing date

所以我在几年的.NET编程之后回到Java并且我正在尝试更新我的Java知识,但是我曾经知道现在已经弃用的Date.parse()函数存在一些问题。我试图不加思索地将字符串解析为日期。我不想使用SimpleDateFormtter,我需要指定每个可接受的格式。我只是想做什么Date.parse(String anyStringFormat)来获取epoch或新的Date(String anyStringFormat)来获取新的日期 - 这些人曾经做过什么。我一直指向的每个文档都说我必须使用具有指定日期格式的SimpleDateFormat。我不希望使用特定的日期格式 - 没有特定日期格式的新方法是什么?我必须遗漏一些东西,因为我无法想象他们会删除这样的功能。

3 个答案:

答案 0 :(得分:3)

  

我一直指向的每个文档都说我必须使用具有指定日期格式的SimpleDateFormat。我不希望使用特定的日期格式 - 没有特定日期格式的新方法是什么?我必须遗漏一些东西,因为我无法想象他们会删除这样的功能。

你做错了。由于注释中提到的确切原因,new Date(String)已被弃用,因为日期字符串可能不明确,因此返回的解析值可能不是您(或您的用户)所期望的。这就是DateFormat.parse(String)存在的原因。

如果您不想使用SimpleDateFormat,因为您不想指定要使用的确切日期字符串格式,您可以自由地实现自己的DateFormat子类和{{1}方法 - 但我希望你在实现逻辑处理模糊日期字符串时会遇到很多麻烦。

编辑:如果你要向你的数据库发送一个字符串,无论如何它都会格式化,那么为什么还要麻烦地将一个字符串解析为你应用中的parse(String)?只需将原始String发送到数据库,您就不需要处理日期解析问题,也不会浪费任何CPU周期来进行不必要的解析。

答案 1 :(得分:1)

您需要使用SimpleDateFormat(或joda-time的DateTimeFormat)。

日期格式的选项太多,您无法指望尝试所有这些格式的方法。如果要支持多种格式,请列出支持的模式。

答案 2 :(得分:0)

我也希望有一个很好的替代Date.parse(String),但它看起来不存在(或者至少不是内置的)。

正如其他评论所说,它已被弃用,因为根据格式,解析日期字符串可能不明确。但是,如果您希望能够解析各种日期而不指定所有日期,那对您没有多大帮助。

所以我看到它的方式,你有三个选择:

  1. 为您感兴趣的每种格式制作SimpleDateFormat,然后尝试将其解析为每种格式
  2. 制作自己的DateFormat实现,可以处理您感兴趣的每种格式
  3. 使用Date.parse(String)(或新的Date(String))并禁止弃用警告。
  4. 就个人而言,我选择指定一些格式字符串,如果没有匹配,我使用了弃用的新Date(字符串)方法。我不喜欢使用弃用的方法,但我觉得作为解析一个已经失败了一些其他尝试的日期的最后努力,它不会受到伤害。