起因
最近一直在做公司系统批量导入的这一个模块,你们看到的这个Excel是我自己写的工具将原本的html页面转过来的结果,当时也没考虑的那么细,也懒的再回去改。这里看到的时间的格式显然是有点问题的。所以怎么搞呢?我在转换的过程中加了一道来处理时间。
实现
时间字符串格式转换成时间:
/**
* 解析时间字符串 类似 20170404171636 / 20170404 这两种特殊格式
* @param dateString 传入一个时间段字符串
* @return 格式正确则返回对应的java.util.Date对象 格式错误返回null
*/
public static Date stringDate2Date(String dateString) {
// 科学计数法数据转为字符串
try {
int len = dateString.length();
if (len == 8) {
// dateString = 20170404
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.parse(dateString);
} else if (len == 14) {
// dateString = 20170404171636
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return sdf.parse(dateString);
}
} catch (Exception e) {
}
return null;
}
分別以时间字符串:20170404171636
、20170404
为例,输出结果为:
Tue Apr 04 17:16:36 GMT+08:00 2017
Tue Apr 04 00:00:00 GMT+08:00 2017
科学计数法时间字符串格式转换成时间:
/**
* 解析时间字符串 类似 2.01704031349E13
* @param dateString 传入一个时间段字符串
* @return 格式正确则返回对应的java.util.Date对象 格式错误返回null
*/
public static Date bigDecimalStringDate2Date(String dateString) {
try {
// 科学计数法数据转为字符串
BigDecimal bd = new BigDecimal(dateString);
dateString = bd.toPlainString();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return sdf.parse(dateString);
} catch (Exception e) {
}
return null;
}
以时间字符串:2.01704031349E13
为例,输出结果为:
Mon Apr 03 13:49:00 GMT+08:00 2017
上述几种方式整合:
这里整合我就用其他的时间处理工具类,不使用上述中的 SimpleDateFormat
,下面是这个时间处理工具类的 maven
地址:
<!-- 时间处理工具类 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.4</version>
</dependency>
自定义的格式化日期时间字符串的方法:
/**
* 格式化日期时间字符串
* @param dateString 日期时间字符串
* @param pattern 模式
* @return Date对象
*/
public static Date formatDateString(String dateString, String pattern) {
try {
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern);
return dateTimeFormatter.parseDateTime(dateString).toDate();
} catch (Exception e) {
return null;
}
}
整合处理上述几种情况时间字符串的新方法:
/**
* 解析时间字符串 类似 2.01704031349E13 / 20170404171636 / 20170404 这两种特殊格式
* @param dateString 传入一个时间段字符串
* @return 格式正确则返回对应的java.util.Date对象 格式错误返回null
*/
public static Date formatDateString2Date(String dateString) {
if (dateString.contains("E")) {
// 科学计数法数据转为字符串
BigDecimal bd = new BigDecimal(dateString);
dateString = bd.toPlainString();
}
int len = dateString.length();
try {
if (len == 8) {
// dateString = 20170404
return formatDateString(dateString, "yyyyMMdd");
} else if (len == 14) {
// dateString = 20170404171636
return formatDateString(dateString, "yyyyMMddHHmmss");
}
} catch (Exception e) {
}
return null;
}
结果自行测试。