SimpleDateFormat 线程不安全,使用 joda-time 实现的DateTime工具类
参考链接:https://blog.csdn.net/lingeio/article/details/107307924
1.原因
private val sdf1: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
private val sdf2: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
private val sdf3: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm")
val currentTime = sdf1.format(new Date)
val minuteTimestamp = (sdf2.parse(currentTime).getTime/1000).toString
2.异常:
java.lang.NumberFormatException: For input string: ".22022220022222E4.3E1.3E1"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) ~[?:1.8.0_151]
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) ~[?:1.8.0_151]
at java.lang.Double.parseDouble(Double.java:538) ~[?:1.8.0_151]
at java.text.DigitList.getDouble(DigitList.java:169) ~[?:1.8.0_151]
at java.text.DecimalFormat.parse(DecimalFormat.java:2056) ~[?:1.8.0_151]
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:1869) ~[?:1.8.0_151]
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514) ~[?:1.8.0_151]
at java.text.DateFormat.parse(DateFormat.java:364) ~[?:1.8.0_151]
at com.leadeon.service.login_realtime.LoginAnalysis$$anonfun$3.apply(LoginAnalysis.scala:109) ~[LD_Spark_ETL-assembly-2.01.jar:2.01]
at com.leadeon.service.login_realtime.LoginAnalysis$$anonfun$3.apply(LoginAnalysis.scala:89) ~[LD_Spark_ETL-assembly-2.01.jar:2.01]
java.lang.NumberFormatException: For input string: "49."
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.8.0_151]
at java.lang.Long.parseLong(Long.java:589) ~[?:1.8.0_151]
at java.lang.Long.parseLong(Long.java:631) ~[?:1.8.0_151]
at java.text.DigitList.getLong(DigitList.java:195) ~[?:1.8.0_151]
at java.text.DecimalFormat.parse(DecimalFormat.java:2051) ~[?:1.8.0_151]
at java.text.SimpleDateFormat.subParse(SimpleDateFormat.java:2162) ~[?:1.8.0_151]
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1514) ~[?:1.8.0_151]
at java.text.DateFormat.parse(DateFormat.java:364) ~[?:1.8.0_151]
at com.leadeon.service.login_realtime.LoginAnalysis$$anonfun$3.apply(LoginAnalysis.scala:109) ~[LD_Spark_ETL-assembly-2.01.jar:2.01]
at com.leadeon.service.login_realtime.LoginAnalysis$$anonfun$3.apply(LoginAnalysis.scala:89) ~[LD_Spark_ETL-assembly-2.01.jar:2.01]
3.解决方法:
val dtf1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS")
val dtf2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
val dtf3 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm")
val date = new Date()
val currentTime= new DateTime(date).toString(dtf1)
val minutes = new DateTime(date).toString(dtf3)
val timestamp = dtf1.parseDateTime(currentTime).getMillis