Linux下DateFormat的parse方法出现”ParseException”异常
做项目用到了时间格式化,将字符串转成Date格式,用了下面的工具方法public static Date formatStringToDate(String source, String pattern) throws Exception {if (StringUtils.isNull(source)) {source = getNowDate();}Simple...
·
做项目用到了时间格式化,将字符串转成Date格式,用了下面的工具方法
public static Date formatStringToDate(String source, String pattern) throws Exception {
if (StringUtils.isNull(source)) {
source = getNowDate();
}
SimpleDateFormat formateDate = new SimpleDateFormat(pattern);
String newDate = formateDate.format(DateFormat.getDateInstance().parse(source));
return formateDate.parse(newDate);
}
source为传入的字符串时间,pattern为时间格式,目前用到的为:yyyy-MM-dd HH:mm:ss ;
在Windows上运行没有问题,但是在linux上运行就报错了:
java.text.ParseException: Unparseable date: "2018-06-01 14:30:40"
java.text.DateFormat.parse(DateFormat.java:366)
网上查了查说是linux不支持这种格式的转化,不认识这种格式 (具体原因还没找,希望的老哥告知);于是照着网上的老哥提供的方法写了另一个时间转化的工具类
public static Date formatStringToDateLinux(String source) throws Exception {
Date dt = new Date();
String[] parts = source.split(" ");
if(parts.length == 2){
String[] partsDate = parts[0].split("-");
String[] partsTime = parts[1].split(":");
if(partsDate.length == 3 && partsTime.length == 3){
int years = Integer.parseInt(partsDate[0]);
int months = Integer.parseInt(partsDate[1]);
int days = Integer.parseInt(partsDate[2]);
int hours = Integer.parseInt(partsTime[0]);
int minutes = Integer.parseInt(partsTime[1]);
int seconds = Integer.parseInt(partsTime[2]);
GregorianCalendar gc = new GregorianCalendar(years,months,
days,hours,minutes,seconds);
dt = gc.getTime();
}
}
return dt;
}
顺便提一下判断系统的方法:
/**
* 判断windows系统
*
* @return
*/
public static boolean isWindowsOS() {
Properties props = System.getProperties();
if (props.getProperty("os.name").toLowerCase().contains("windows")) {
return true;
}
return false;
}
/**
* 判断linux系统
*
* @return
*/
public static boolean isLinuxOS() {
Properties props = System.getProperties();
if (props.getProperty("os.name").toLowerCase().contains("linux")) {
return true;
}
return false;
}
/**
* 判断mac系统
*
* @return
*/
public static boolean isMacOS() {
Properties props = System.getProperties();
if (props.getProperty("os.name").toLowerCase().contains("mac")) {
return true;
}
return false;
}
可以先判断当前系统,再选择使用哪个方法转换, 或者直接都使用第二种方法 ;
if(HawkOSOperator.isLinuxOS()){
last.setTime(DateUtil.formatStringToDateLinux(lastModifyTime));
}else {
last.setTime(DateUtil.formatStringToDate(lastModifyTime, "yyyy-MM-dd HH:mm:ss"));
}
我的日期字符串格式是”yyyy-MM-dd HH:mm:ss”的,所以代码如上。要转化别的格式,截取字符中的时候会不一样。但,它的核心代码是 “GregorianCalendar gc = GregorianCalendar(years, months, days, hours, minutes, seconds);”。也就是用GregorianCalendar类来进行String到Date类型的转换
感谢老哥gaoligaoli:https://blog.csdn.net/gaoligaoli/article/details/2133582
更多推荐
已为社区贡献1条内容
所有评论(0)