Java Date.parse还是新的Date(String)替换?
因此,在.NET编程几年之后,我回到了Java,我试图更新我的Java知识,但是我曾经知道现在不推荐使用的Date.parse()函数存在一些问题。我试图不加区分地将一个字符串解析为一个日期。我不想在我需要指定每种可接受格式的情况下使用SimpleDateFormtter。我只想做什么Date.parse(String anyStringFormat)来获取新纪元或新日期(字符串anyStringFormat)来获取新日期 - 这些人曾经做过什么。我一直指向的每个文档都说我必须使用具有指定日期格式的SimpleDateFormat。我不希望使用特定的日期格式 - 没有特定日期格式的新方法是什么?我一定错过了一些东西,因为我无法想象他们会删除这样的功能。Java Date.parse还是新的Date(String)替换?
我一直指向的每个文档都说我必须使用具有指定日期格式的SimpleDateFormat。我不希望使用特定的日期格式 - 没有特定日期格式的新方法是什么?我一定错过了一些东西,因为我无法想象他们会删除这样的功能。
你做错了。 new Date(String)
由于注释中提到的确切原因而被弃用,因为日期字符串可能不明确,因此返回的分析值可能不是您(或您的用户)所期望的值。这就是为什么DateFormat.parse(String)
存在。
如果你不想使用SimpleDateFormat,因为你不想指定确切的日期字符串格式来使用,你可以自由地实现你自己的子类DateFormat
和parse(String)
方法 - 但我希望你在处理含糊的日期字符串时会遇到很多麻烦。
编辑:如果你发送一个字符串到你的数据库,它将被格式化,那么为什么还要麻烦在你的应用中解析字符串到java.util.Date
?只需将原始字符串发送到数据库,并且您永远不需要处理日期解析问题,也不会浪费任何CPU周期进行不必要的解析。
这是很可能我做错了。我正在接受一个由多种格式的用户输入的字符串(验证器有几十种可接受的格式)。我试图将其更改为一个Date对象,最终是一个java.sql.date对象,并将其作为java.sql.date传递给一个存储过程,而不必重做一打格式检查以匹配验证器。由于它已经在控制器中进行了验证,因此该模型只需对其进行转换即可,无需重新验证格式。关于编辑的 – user743115 2011-05-07 15:09:35
- 存储的proc需要一个日期。我无法更改输入参数类型。 – user743115 2011-05-07 15:11:12
您需要使用SimpleDateFormat
(或joda-time的DateTimeFormat
)。
日期格式有太多的选项,你不能指望一个方法来尝试所有的日期格式。如果您想支持多种格式,请列出支持的模式列表。
我希望能很好地替代Date.parse(String),但它看起来像不存在(或者至少不是内置的)。
正如其他评论所说,它已被弃用,因为解析日期字符串可能不明确,具体取决于格式。但是,如果您希望能够解析各种日期而无需全部指定,那么这对您无能为力。
所以我看到它的方式,你有三种选择:
- 化妆的SimpleDateFormat对你有兴趣,然后尝试将其解析为他们每个人的
- 使自己的执行日期格式的各种格式它可以处理您感兴趣的每种格式。
- 使用Date.parse(String)(或新的Date(String))并且仅仅禁止弃用警告。
个人而言,对于我的应用程序,我选择了指定几个格式字符串,如果它们都不匹配,我使用了不推荐使用的新Date(String)方法。我不喜欢使用已弃用的方法,但我觉得作为解析已经失败了一些其他尝试的日期的最后努力,它不会受到伤害。
@ user743115:“我不希望使用SimpleDateFormtter,我需要指定每种可接受的格式。”就我而言,当他们向我提供他们想要的细节时,我有兴趣帮助别人。这不相关。有时程序员必须做**必需的**。毕竟,这就是为什么他们付给我们'大钱'的原因。咧嘴和它裸露。一路笑到银行。 – 2011-05-07 14:51:41
你会如何分析'04/05/06'?截至2006年4月5日?或者截至2006年5月4日?或截至2004年5月6日?所有3个都是合理的答案。 – 2011-05-07 14:53:30
@Nickerson它没关系 - 它直接进入数据库,它被存储过程正确格式化。第一次(在代码中),我不应该格式化它不会有问题。只是浪费额外的代码。目前,如果我执行新的Date(mystring),但在dateformat.parse之后不起作用,它会很好用。 – user743115 2011-05-07 14:56:49