2014-10-03 199 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