2010-01-18 102 views
4

我必須驗證來自csv文件的日期字符串的格式。我使用csvReader(au.com.bytecode.opencsv.CSVReader)解析器。以下是我用來從csv閱讀器獲取數據並將其更改爲日期格式的代碼。在Groovy控制器中驗證日期格式

def String strToDate = csvrow[monatVal]

myDate = new Date().parse("dd.MM.yy HH:mm",strToDate)

的問題是,在CSV文件中存在的如約會條目。 '41 .01.10 12:22',當我打印'myDate'時,我有以下內容

myDate = '10.02.10 12:22' - >它在2月份增加了10天。

我想在這裏對日期格式進行驗證檢查。有沒有辦法在解析時檢查dateString?

由於提前, Sudheer

解析,它可能是最好的,因爲靜態方法,即Date.parse(格式輸入),它返回一個新的日期實例 - 對嗎?

回答

7

不贊成使用您用來執行日期分析的方法。您應該使用DateFormat.parse()SimpleDateFormat.parse()

這些類有setLenient(boolean)方法。如果你將lenient設置爲false,那麼當解析41.01時,你將不會得到2月10日,而是解析器將拋出一個ParseException。

運行下面的代碼,看看我的意思

def dateParser = new java.text.SimpleDateFormat("dd.MM.yy HH:mm") 

// If the next line is removed the date will be parsed to 10 February instead of 
// throwing a ParseException 
dateParser.lenient = false 

dateParser.parse('41.01.10 12:22') 
+0

感謝唐。將寬鬆設置爲false。但是我沒有給出正確的格式,而是給出了類似dateParser.parse('41 .01.10 12:22:34')的東西,它沒有意識到秒模式不是作爲SimpleDateFormat設置的模式。我該如何檢查?我試過已經applypattern。儘管發生了很多變化。 – sudheer 2010-01-19 10:01:12

+0

我不確定SimpleDateFormat是否支持這個功能。也許你可以在試圖解析日期字符串之前檢查模式字符串的長度和日期字符串的長度是否相同 – 2010-01-19 14:49:39