日期工具类,根据日期格式自动选择格式类型
2016-05-05 19:33
681 查看
日期工具类,经常会用到把String转成Date或long类型的方法,一般需要指定格式类型(pattern,比如"yyyy-MM-dd HH:mm:ss"),转换方法如下:
这种方法有个缺点就是需要指定一个pattern,如果格式变化了,就得改代码。
利用正则表达式,可以解决这个问题。代码如下:
先定义一个枚举类,把各种已知的格式及其正则表达式关联起来。同时定义一个方法,利用这个枚举类,通过日期字符串获取格式类型:
利用这个枚举类的字符串转long方法(字符串转Date的方法类似,略):
测试结果如下:
1462432929
1462432929
1462377600
大功告成!
/** * 将指定的日期转换成Unix时间戳 * * @param String date 需要转换的日期 * @param String dateFormat 需要转换的日期格式 * @return long 时间戳,单位:秒 */ public static long dateToUnixTimestamp(String dateStr, String pattern) { long timestamp = 0; try { timestamp = new SimpleDateFormat(pattern).parse(dateStr).getTime(); } catch (ParseException e) { e.printStackTrace(); } return timestamp/1000; }
这种方法有个缺点就是需要指定一个pattern,如果格式变化了,就得改代码。
利用正则表达式,可以解决这个问题。代码如下:
先定义一个枚举类,把各种已知的格式及其正则表达式关联起来。同时定义一个方法,利用这个枚举类,通过日期字符串获取格式类型:
/** 日期格式枚举类,根据需要添加其他格式 **/ public enum DatePattern{ ISO_SECOND("yyyy-MM-dd'T'HH:mm:ss", "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$"), ISO_MINUTE("yyyy-MM-dd'T'HH:mm", "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"), DATE_TIME("yyyy-MM-dd HH:mm:ss", "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"), DATE_ONLY("yyyy-MM-dd", "^\\d{4}-\\d{2}-\\d{2}$"), YEAR_MONTH("yyyy-MM", "^\\d{4}-\\d{2}$"); DatePattern(String pattern, String regex){ this.pattern = pattern; this.regex = regex; } public String getPattern() { return pattern; } public String getRegex() { return regex; } private String pattern; private String regex; /** * 根据日期字符串,判断该日期的格式类型。 * * @param dateStr 日期字符串 * @return 日期的格式类型,比如getPatternByDateStr("2016-04-27 10:15:08")返回:"yyyy-MM-dd HH:mm:ss" */ public static String getPatternByDateStr(String dateStr){ for(DatePattern df : DatePattern.values()){ if(RegexUtils.matches(dateStr, df.getRegex())){ return df.getPattern(); } } return null; } }
利用这个枚举类的字符串转long方法(字符串转Date的方法类似,略):
/** * 将指定的日期转换成Unix时间戳 * * @param String date 需要转换的日期,自动匹配日期格式 * @return long 时间戳,单位:秒 */ public static long dateToUnixTimestamp(String dateStr) { String d = dateStr.trim(); String pattern = DatePattern.getPatternByDateStr(dateStr); return dateToUnixTimestamp(d, pattern); } //测试 public static void main(String[] args) { System.out.println(dateToUnixTimestamp("2016-05-05T15:22:09")); System.out.println(dateToUnixTimestamp("2016-05-05 15:22:09")); System.out.println(dateToUnixTimestamp("2016-05-05")); }
测试结果如下:
1462432929
1462432929
1462377600
大功告成!
相关文章推荐
- 日期工具类
- java中日期的使用
- ArcMap2Sld:一个将MXD中图层配图样式转换为OGC的SLD文件的开源工具
- 日期工具类 便于处理前端拿到的日期字符串
- Windows脚本初探之VBScript数据类型的自动转换
- 日期格式转换【工具类】
- MyBatis与Mysql字段映射的三种方式
- DateUtil 日期工具类
- 14个常用的日期方法
- java工具类开发之日期工具类DateUtils和读取属性配置文件工具类PropertiesUtils
- git换行符自动转换导致整个文件被修改的解决方案
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils
- 活用工具类:日期类操作:DateUtils 和 DateFormatUtils