java 字符串转时间,支持多种格式
程序员文章站
2022-07-12 20:34:26
...
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringToDateUtil { public static final Map<Integer, Character> charMap = new HashMap<Integer, Character>(); public static final Pattern p = Pattern.compile("^(\\d+)\\D*(\\d*)\\D*(\\d*)\\D*(\\d*)\\D*(\\d*)\\D*(\\d*)"); static { charMap.put(1, 'y'); charMap.put(2, 'M'); charMap.put(3, 'd'); charMap.put(4, 'H'); charMap.put(5, 'm'); charMap.put(6, 's'); } /** * 任意日期字符串转换为Date,不包括无分割的纯数字(13位时间戳除外) ,日期时间为数字,年月日时分秒,但没有毫秒 * * @param dateString 日期字符串 * @return Date */ public static Date stringToDate(String dateString) { dateString = dateString.trim().replaceAll("[a-zA-Z]"," "); if(Pattern.matches("^[-+]?\\d{13}$",dateString)) {//支持13位时间戳 return new Date(Long.parseLong(dateString)); } Matcher m = p.matcher(dateString); StringBuilder sb = new StringBuilder(dateString); if (m.find(0)) {//从被匹配的字符串中,充index = 0的下表开始查找能够匹配pattern的子字符串。m.matches()的意思是尝试将整个区域与模式匹配,不一样。 int count = m.groupCount(); for (int i = 1; i <= count; i++) { for (Map.Entry<Integer, Character> entry : charMap.entrySet()) { if (entry.getKey() == i) { sb.replace(m.start(i), m.end(i), replaceEachChar(m.group(i), entry.getValue())); } } } } else { System.out.println("错误的日期格式"); return null; } String format = sb.toString(); SimpleDateFormat sf = new SimpleDateFormat(format); try { return sf.parse(dateString); } catch (ParseException e) { System.out.println("日期字符串转Date出错"); e.printStackTrace(); return null; } } /** * 将指定字符串的所有字符替换成指定字符,跳过空白字符 * * @param s 被替换字符串 * @param c 字符 * @return 新字符串 */ public static String replaceEachChar(String s, Character c) { StringBuilder sb = new StringBuilder(""); for (Character c1 : s.toCharArray()) { if (c1 != ' ') { sb.append(String.valueOf(c)); } } return sb.toString(); } }
推荐阅读
-
js 字符串转时间格式,js 获取当前时间
-
【日期时间处理】获取当前日期时间戳、日期格式字符串转时间戳、日期时间格式字符串转时间戳
-
java 字符串转时间,支持多种格式
-
java 字符串转时间,支持多种格式
-
java 如何将多种字符串格式 解析为Date格式
-
c++11多种格式时间转化为字符串的方法实现
-
mysql-在MySQL中字符串转成时间,29-NOV-12 20:40:25.2 这样的格式如何转?
-
PHP采集利器:根据开始字符串和结束字符串截取需要的采集内容数据,纯PHP函数高性能实现,支持多种字符编码格式
-
Java时间戳转时间,获取一天的最大时间、最小时间,时间格式化
-
java 时间日期 字符串转Date转LocalDate 后 计算相差天数