我想知道是否可以解析任何字符串(至少尝试)到sql Date而不指定字符串格式?换句话说,我想创建一个泛型方法,它将字符串作为输入并返回sql Date。
例如我有:
String date1="31/12/2099";
String date2="31-12-2099";
并调用parseToSqlDate(date1)和parseToSqlDate(date2),它将返回sql日期。
答案 0 :(得分:1)
简答:否
为什么:将任何字符串解析为有效日期是您作为智能人员无法完成的任务(没有“逻辑”方式来确定正确的日期),因此您无法“告诉”计算机(程序)为你做到这一点(见JGrice的评论,我们仍然有4位数的年份)。
答案很长:也许,如果你愿意承担风险或不需要很高的成功率。
如何:
定义日期的最小(格式)要求。例如。 “最小日期包含1-8个数字; 01/01 / 2001,01-01-01,01.01(+当前年份),1.1(+当前年份),1(+当前月份+当前年份)和/或”。 。包含1-6个数字和几个月的字母“; 2001年1月1日等等。
使用正如[^ 0-9a-zA-Z]这样的正则表达式将所有非数字/非月份名字符分开输入(快速思考,可能会有一些陷阱)
< / LI>您现在有1到3个(实际上更多,如果包括时间)单独的数字+ 1个月的名称,可以按照您喜欢的方式对齐年/月/日
对于这种“对齐”,有几种可能性:
但是,这是一个很大的问题,你可以期待任何这样的方法在某些时候成为一个主要的PITA,因为你永远不能完全“信任”它正确猜测(你永远不能一定要错过一些特殊格式或引入一些含糊不清的解释)。我概述了一些个案/格式,但绝对不是全部,所以如果你实际使用它,你会经常改进那个方法。
评论的附录:“可能是添加另一个参数,以这种方式知道日,月等的去向?”因此,您希望添加“伪格式字符串”参数,指定日,月和年的顺序;这将使它变得更容易(因为“简单地”过滤掉分隔符可以实现)。