2016-11-14 143 views
1

我有下面的代碼來驗證給定的日期格式的日期:獲取年,月,日

val df = new SimpleDateFormat("MM/dd/yyyy"); 
df.setLenient(false); 

try { 
    val date = df.parse("11/13/2014"); 
} 
catch { 
    case pe: ParseException => println("date error") 
} 

現在,我需要的是獲得了年,月,日三個變量。達到此目的的最佳方法是什麼?請注意,我需要一個基於性能的解決方案,因爲我需要驗證/轉換數千個日期。

+2

簡單...去閱讀Date API的文檔。如果你仍然有問題,請嘗試一下,然後在這裏問。 –

+0

它說,getYear已被棄用,這就是爲什麼我問 – ps0604

+2

我會在任何情況下使用joda-time或java.time。 – Reactormonk

回答

3

java.time

使用Java 8和新的日期/時間API。更好,更清潔,面向未來。

val dateFormat = "MM/dd/yyyy" 
val dtf = java.time.format.DateTimeFormatter.ofPattern(dateFormat) 
val dateString = "11/13/2014" 
val d = java.time.LocalDate.parse(dateString, dtf) 
val year = d.getYear 
val monthNumber = d.getMonthValue 

您可以訪問Month枚舉對象。

val month = d.getMonth 

Month.NOVEMBER

val dayOfMonth = d.getDayOfMonth 

一旦你解析成java.time.LocalDate輸入,就可以得到一年得到年,等等。

要驗證,請捕獲爲無效輸入生成的DateTimeParseException

如果你想跳過正確的日期驗證(如性能),只是提取Y,M,d - 你可以分割字符串,並得到整數如下圖所示

val ymd = dateString.split("/").map(_.toInt) 
ymd: Array[Int] = Array(11, 13, 2014) 
+0

如果你只是分割字符串,*解析* LocalDate的意義何在?改用'LocalDate'方法:['d.getYear'](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#getYear--),['d。 getMonthValue'](https://docs.oracle。com/javase/8/docs/api/java/time/LocalDate.html#getMonthValue--)等。 – laughedelic

+1

OP提到了「驗證」。將它解析爲日期是最終驗證它是日期,而不僅僅是斜線分隔的整數(例如「65/82/1314」)。 OP可以根據需要隨意使用少量的解決方案 – radumanolescu

+0

他說:「現在,我需要的是獲得三個變量的年,月和日」。 – laughedelic

相關問題