将任何字符串解析为Sql日期

时间:2014-10-03 15:01:03

标签: java

我想知道是否可以解析任何字符串(至少尝试)到sql Date而不指定字符串格式?换句话说,我想创建一个泛型方法,它将字符串作为输入并返回sql Date。

例如我有:

String date1="31/12/2099";
String date2="31-12-2099";

并调用parseToSqlDate(date1)和parseToSqlDate(date2),它将返回sql日期。

1 个答案:

答案 0 :(得分:1)

简答:否

为什么:将任何字符串解析为有效日期是您作为智能人员无法完成的任务(没有“逻辑”方式来确定正确的日期),因此您无法“告诉”计算机(程序)为你做到这一点(见JGrice的评论,我们仍然有4位数的年份)。

答案很长:也许,如果你愿意承担风险或不需要很高的成功率。

如何:

  1. 定义日期的最小(格式)要求。例如。 “最小日期包含1-8个数字; 01/01 / 2001,01-01-01,01.01(+当前年份),1.1(+当前年份),1(+当前月份+当前年份)和/或”。 。包含1-6个数字和几个月的字母“; 2001年1月1日等等。

  2. 使用正如[^ 0-9a-zA-Z]这样的正则表达式将所有非数字/非月份名字符分开输入(快速思考,可能会有一些陷阱)

    < / LI>
  3. 您现在有1到3个(实际上更多,如果包括时间)单独的数字+ 1个月的名称,可以按照您喜欢的方式对齐年/月/日

  4. 对于这种“对齐”,有几种可能性:

    • 首先尝试固定格式,如果它“适合”,请接受,否则尝试另一种(或失败)
    • (只有你一次获得多个条目)通过假设所有条目都相同来猜测格式(例如,包含值> 12的任何数字块不是一个月而且&gt; 31不是一天)< / LI>

    但是,这是一个很大的问题,你可以期待任何这样的方法在某些时候成为一个主要的PITA,因为你永远不能完全“信任”它正确猜测(你永远不能一定要错过一些特殊格式或引入一些含糊不清的解释)。我概述了一些个案/格式,但绝对不是全部,所以如果你实际使用它,你会经常改进那个方法。

    评论的附录:“可能是添加另一个参数,以这种方式知道日,月等的去向?”因此,您希望添加“伪格式字符串”参数,指定日,月和年的顺序;这将使它变得更容易(因为“简单地”过滤掉分隔符可以实现)。