2014-10-03 202 views
0

我不知道是否有可能解析任何字符串(至少尝试)sql日期没有指定字符串格式?换句话说,我想制作一个通用方法,它将输入一个字符串并返回一个sql日期。解析任何字符串SQL日期

比如我有:

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

,并呼吁parseToSqlDate(日期1)和parseToSqlDate(date2的),这将返回的sql日期。

+0

祝你好运! – christopher 2014-10-03 15:01:55

+0

谢谢!我不那么乐观,但希望死亡了:) – Aditzu 2014-10-03 15:03:33

+0

我想你会得到更好的回应,如果你显示你的企图。 – christopher 2014-10-03 15:06:26

回答

1

简短的回答:没有

为什么:解析任何字符串为有效日期是一个任务,你作为一个有智慧的不能做(没有“逻辑”的方法来确定正确的日期),所以你不能“告诉”一台计算机(程序)为你做这件事(参见JGrice的评论,而我们仍然有4位数的年份)。

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

如何:

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

  2. 将输入沿任何非数字/非月份字符拆分,使用正则表达式[^ 0 (快速思考,可能会有一些陷阱)

  3. 你现在有1至3(实际上更多,如果例如包括时间)单独的数字+ 1个月的名称,可以对齐年/月/日任何你喜欢的方式

对于这种“定位”,有几种可能:

  • 在第一次尝试固定的格式,如果是“千篇一律”,把它,否则尝试另一个(或失败)
  • (只有你得到更多的一次只能有一个条目)通过假设所有条目都相同来猜测格式(例如,包含值的任何数量的块> 12月不和> 31也不是一天)

,这是一个大的,你可以期望任何这样的方法成为在某一时刻的一大PITA ,因为你永远无法完全“相信”它正确猜测(你永远不能确定错过了一些特殊的格式或引入了一些模棱两可的解释)。我概述了一些个案/格式,但绝对不是全部,所以如果实际使用它,你会经常改进该方法。

你的评论附录:“可能会添加另一个参数,并以这种方式知道日,月等地点?”所以你必须添加“pseudo-format-string”参数,指定日,月和年的顺序;这将使它变得更容易(因为“简单地”可以实现分隔符的筛选)。

+0

谢谢你的回答。 – Aditzu 2014-10-03 16:33:00