【发布时间】:2018-02-05 10:22:50
【问题描述】:
def cleantz( time : String ) : String = {
var sign_builder= new StringBuilder ++= time
println(sign_builder)
var clean_sign = ""
if (sign_builder.charAt(23).toString == "-"){
clean_sign= sign_builder.replace(23,24,"-").toString()
}else{
clean_sign = sign_builder.replace(23,24,"+").toString()
}
var time_builder= new StringBuilder ++= clean_sign
if (time_builder.charAt(26).toString == ":"){
val cleanz = time_builder.deleteCharAt(26)
cleanz.toString()
}else{
time_builder.toString()
}
}
val start = ISO8601Format.parse(cleantz(01/01/2017 6:54 PM))
我收到此错误:
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:23
【问题讨论】:
-
为什么我得到 java.lang.StringIndexOutOfBoundsException
-
当您在长度小于 23 个字符的
StringBuilder上调用charAt(23)时,您认为会发生什么? -
我已经编辑了代码,这就是我实际运行的内容
-
当字符串少于 24 个字符时,您试图获取位置 23 的字符(因为第一个字符位于位置 0,第二个字符位于位置 1,依此类推)。所以你应该先检查
length()。但是无论如何,如果您拥有的字符串格式为01/01/2017 6:54 PM,为什么需要检查字符串是否包含-?您需要将其解析为日期,然后使用ISO8601Format进行格式化 -
您标记了您的问题 jodatime,虽然 Joda-Time 是一个不错的选择,但它也处于维护模式,它的作者建议我们继续使用
java.time,它是由绘图的同一个人开发的来自 Joda-Time 的所有经验。那么这对您来说不是更好的选择吗?
标签: scala jodatime datetime-format datetime-parsing