我正在尝试创建一个udf以将两个字符串作为参数;一种是DD-MM-YYYY格式(例如“ 14-10-2019”),另一种是浮动格式(例如“ 0.000”)。我想将类似float的字符串转换为int并将其添加到date对象,以获取另一个要作为字符串返回的日期。
def getEndDate = udf{ (startDate: String, no_of_days : String) =>
val num_days = no_of_days.trim.toInt //Converts the String value to Integer
val date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse(startDate) //Parses the string date to timestamp
calObj.setTime(date) //Sets the calendar object instance
calObj.add(Calendar.DAY_OF_MONTH, num_days) //Adds the number of days to the start date
val endDate = calObj.getTime().toString //Gets end date in string format
endDate
}
尝试运行此代码时,出现以下错误:
由以下原因引起:java.lang.NumberFormatException:对于输入字符串:“ 0.000”
答案 0 :(得分:1)
像“ 0.0000” 这样的字符串不能直接解析为整数。您可以尝试先使用toDouble
,然后使用toInt
:
no_of_days.trim.toDouble.toInt
它将舍入值。如果您想将值四舍五入到最接近的值,则应该考虑使用round
:
no_of_days.trim.toDouble.round
您的代码的另一个问题是,您不应该使用SimpleDateFormat
,因为它已经过时了。您应该改用LocalDate
和DateTimeFormatter
:
val date = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("dd-MM-
yyyy"))
date.plusDays(num_days)
答案 1 :(得分:0)
我不建议您这样做,但这是一些解决您问题的示例。
scala> "0.00".toDouble.toInt
res0: Int = 0
scala> "2.45".toDouble.toInt
res1: Int = 2
scala> "2.5".toDouble.toInt
res2: Int = 2
scala> "2.6".toDouble.toInt
res3: Int = 2
scala> "-1".toDouble.toInt
res4: Int = -1
scala> "-1.5".toDouble.toInt
res5: Int = -1