web开发中经常需要对日期进行操作,如字符串日期转long,long型转字符串,日期计算等,提取一个日期处理工具类,提供常见的日期操作可以让开发更轻松一些。
毫秒(long)转字符串日期
对long型时间进行格式化在web开发中是很经常出现的一个操作,这里主要使用joda-time包内的DateTime来实现,joda-time是时间操作很好的一个工具包。
public final static String DATE_FORMAT_DEFAULT = "yyyy-MM-dd";
/**
* 将毫秒时间转换为yyyy-MM-dd格式的时间
* @author yangwenkui
* @time 2017年10月6日 下午5:56:40
* @param time 毫秒数
* @return
*/
public static String longToString(long time) {
return longToString(time, DATE_FORMAT_DEFAULT);
}
/**
* 将毫秒时间转换为指定格式的时间
* @author yangwenkui
* @time 2017年10月6日 下午5:56:40
* @param time 毫秒数
* @param format 日期格式
* @return
*/
public static String longToString(long time, String format) {
if (StringUtils.isBlank(format)) {
format = DATE_FORMAT_DEFAULT;
}
DateTime dTime = new DateTime(time);
return dTime.toString(format);
}
//添加maven依赖
joda-time
joda-time
字符串日期转毫秒(long)
字符串日期转为毫秒值也是web开发内经常出现的一个场景,这里主要根据字符串的长度来判断其格式,进而截取字符串获取年、月、日等,再将这些值设置入calender内对应的属性上获取最终的时间。
/**
* 将字符串类型的日期转换为毫秒数
* @author yangwenkui
* @time 2017年10月6日 下午6:00:27
* @param dateStr
* @return
*/
public static long parseStringToLong(String dateStr) {
dateStr = dateStr.trim();
if (dateStr.length() == 19 || dateStr.length() == 23) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(5, 7)) - 1,
Integer.parseInt(dateStr.substring(8, 10)),
Integer.parseInt(dateStr.substring(11, 13)),
Integer.parseInt(dateStr.substring(14, 16)),
Integer.parseInt(dateStr.substring(17, 19)));
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 16) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(5, 7)) - 1,
Integer.parseInt(dateStr.substring(8, 10)),
Integer.parseInt(dateStr.substring(11, 13)),
Integer.parseInt(dateStr.substring(14, 16)));
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 14) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(4, 6)) - 1,
Integer.parseInt(dateStr.substring(6, 8)),
Integer.parseInt(dateStr.substring(8, 10)),
Integer.parseInt(dateStr.substring(10, 12)),
Integer.parseInt(dateStr.substring(12, 14)));
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 10 || dateStr.length() == 11) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(5, 7)) - 1,
Integer.parseInt(dateStr.substring(8, 10)), 0, 0, 0);
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else if (dateStr.length() == 8 ) {
try {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.set(Integer.parseInt(dateStr.substring(0, 4)),
Integer.parseInt(dateStr.substring(4, 6)) - 1,
Integer.parseInt(dateStr.substring(6, 8)), 0, 0, 0);
cal.set(java.util.Calendar.MILLISECOND, 0);
return (cal.getTime().getTime());
} catch (Exception e) {
return 0;
}
} else {
try {
return Long.parseLong(dateStr);
} catch (Exception e) {
return 0;
}
}
}
获取指定日期前后N天的日期
日期计算偶尔也会出现,这里主要通过java.util.Calendar类来实现,Calendar提供了良好的接口,可以方便的获取年、月、日、时、分、秒、周等,也可以对应的设置指定属性的值,是很方便的日期计算工具。
/**
* 获取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正数 多少天之后的日期 负数 多少天之后的日期
* @return
*/
public static String getDay(String date,int num){
return getDay(date, num,DATE_FORMAT_DEFAULT);
}
/**
* 获取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正数 多少天之后的日期 负数 多少天之后的日期
* @param format 日期格式
* @return
*/
public static String getDay(String date,int num,String format){
long t = parseStringToLong(date);
return getDay(t, num, DATE_FORMAT_DEFAULT);
}
/**
* 获取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正数 多少天之后的日期 负数 多少天之后的日期
* @return
*/
public static String getDay(long date,int num){
return getDay(date, num, DATE_FORMAT_DEFAULT);
}
/**
* 获取指定日期前后num天的日期
* @author yangwk
* @time 2017年9月14日 上午11:13:18
* @param date
* @param num 正数 多少天之后的日期 负数 多少天之后的日期
* @param format 日期格式
* @return
*/
public static String getDay(long date,int num,String format){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH)+num);
return longToString(calendar.getTimeInMillis(),format);
}
小结
web开发内,提取常用工具类,不断丰富开发工具包是很有意义的事,不用同样的事情自己或其他同事重复开发很多次。本文列出了比较常用的long型时间格式化、string类型时间转为long型毫秒数及日期计算的方法。可以基于joda-time包和calendar提前自己常用的攻击方法。
完整代码请在github内rest-base项目内查看。
https://github.com/q7322068/rest-base