1、字符串处理工具类
1.1、StrUtils
package com.study.java8.util;
/**
* @Classname:StrUtils
* @Description:字符串工具类
* @Date:2023/9/9 9:37
* @Author:jsz15
*/
import org.apache.commons.lang.text.StrBuilder;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StrUtils extends StringUtils {
/**
* 空字符串
*/
private static final String NULLSTR = "";
/**
* 下划线
*/
private static final char SEPARATOR = '_';
/**
* 获取参数不为空值
*
* @param value defaultValue 要判断的value
* @return value 返回值
*/
public static T nvl(T value, T defaultValue) {
return value != null ? value : defaultValue;
}
/**
* * 判断一个Collection是否为空, 包含List,Set,Queue
*
* @param coll 要判断的Collection
* @return true:为空 false:非空
*/
public static boolean isEmpty(Collection> coll) {
return isNull(coll) || coll.isEmpty();
}
/**
* * 判断一个Collection是否非空,包含List,Set,Queue
*
* @param coll 要判断的Collection
* @return true:非空 false:空
*/
public static boolean isNotEmpty(Collection> coll) {
return !isEmpty(coll);
}
/**
* * 判断一个对象数组是否为空
*
* @param objects 要判断的对象数组
* * @return true:为空 false:非空
*/
public static boolean isEmpty(Object[] objects) {
return isNull(objects) || (objects.length == 0);
}
/**
* * 判断一个对象数组是否非空
*
* @param objects 要判断的对象数组
* @return true:非空 false:空
*/
public static boolean isNotEmpty(Object[] objects) {
return !isEmpty(objects);
}
/**
* * 判断一个Map是否为空
*
* @param map 要判断的Map
* @return true:为空 false:非空
*/
public static boolean isEmpty(Map, ?> map) {
return isNull(map) || map.isEmpty();
}
/**
* * 判断一个Map是否为空
*
* @param map 要判断的Map
* @return true:非空 false:空
*/
public static boolean isNotEmpty(Map, ?> map) {
return !isEmpty(map);
}
/**
* * 判断一个字符串是否为空串
*
* @param str String
* @return true:为空 false:非空
*/
public static boolean isEmpty(String str) {
return isNull(str) || NULLSTR.equals(str.trim());
}
/**
* * 判断一个字符串是否为非空串
*
* @param str String
* @return true:非空串 false:空串
*/
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
/**
* * 判断一个对象是否为空
*
* @param object Object
* @return true:为空 false:非空
*/
public static boolean isNull(Object object) {
return object == null;
}
/**
* * 判断一个对象是否非空
*
* @param object Object
* @return true:非空 false:空
*/
public static boolean isNotNull(Object object) {
return !isNull(object);
}
/**
* * 判断一个对象是否是数组类型(Java基本型别的数组)
*
* @param object 对象
* @return true:是数组 false:不是数组
*/
public static boolean isArray(Object object) {
return isNotNull(object) && object.getClass().isArray();
}
/**
* 去空格
*/
public static String trim(String str) {
return (str == null ? "" : str.trim());
}
/**
* 截取字符串
*
* @param str 字符串
* @param start 开始
* @return 结果
*/
public static String substring(final String str, int start) {
if (str == null) {
return NULLSTR;
}
if (start < 0) {
start = str.length() + start;
}
if (start < 0) {
start = 0;
}
if (start > str.length()) {
return NULLSTR;
}
return str.substring(start);
}
/**
* 截取字符串
*
* @param str 字符串
* @param start 开始
* @param end 结束
* @return 结果
*/
public static String substring(final String str, int start, int end) {
if (str == null) {
return NULLSTR;
}
if (end < 0) {
end = str.length() + end;
}
if (start < 0) {
start = str.length() + start;
}
if (end > str.length()) {
end = str.length();
}
if (start > end) {
return NULLSTR;
}
if (start < 0) {
start = 0;
}
if (end < 0) {
end = 0;
}
return str.substring(start, end);
}
/**
* 格式化文本, {} 表示占位符
* 此方法只是简单将占位符 {} 按照顺序替换为参数
* 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
* 例:
* 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
* 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
* 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
*
* @param template 文本模板,被替换的部分用 {} 表示
* @param params 参数值
* @return 格式化后的文本
*/
public static String format(String template, Object... params) {
if (isEmpty(params) || isEmpty(template)) {
return template;
}
return StrFormatter.format(template, params);
}
/**
* 驼峰首字符小写
*/
public static String uncapitalize(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return str;
}
return new StrBuilder(strLen).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1)).toString();
}
/**
* 下划线转驼峰命名
*/
public static String toUnderScoreCase(String s) {
if (s == null) {
return null;
}
StringBuilder sb = new StringBuilder();
boolean upperCase = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
boolean nextUpperCase = true;
if (i < (s.length() - 1)) {
nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
}
if ((i > 0) && Character.isUpperCase(c)) {
if (!upperCase || !nextUpperCase) {
sb.append(SEPARATOR);
}
upperCase = true;
} else {
upperCase = false;
}
sb.append(Character.toLowerCase(c));
}
return sb.toString();
}
/**
* 是否包含字符串
*
* @param str 验证字符串
* @param strs 字符串组
* @return 包含返回true
*/
public static boolean inStringIgnoreCase(String str, String... strs) {
if (str != null && strs != null) {
for (String s : strs) {
if (str.equalsIgnoreCase(trim(s))) {
return true;
}
}
}
return false;
}
/**
* 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld
*
* @param name 转换前的下划线大写方式命名的字符串
* @return 转换后的驼峰式命名的字符串
*/
public static String convertToCamelCase(String name) {
StringBuilder result = new StringBuilder();
// 快速检查
if (name == null || name.isEmpty()) {
// 没必要转换
return "";
} else if (!name.contains("_")) {
// 不含下划线,仅将首字母大写
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
// 用下划线将原始字符串分割
String[] camels = name.split("_");
for (String camel : camels) {
// 跳过原始字符串中开头、结尾的下换线或双重下划线
if (camel.isEmpty()) {
continue;
}
// 首字母大写
result.append(camel.substring(0, 1).toUpperCase());
result.append(camel.substring(1).toLowerCase());
}
return result.toString();
}
/**
* 根据原始信息占位符中的内容进行变量提取 例如:a${b}c${d} -> [b,d]
*
* @param content 原始信息
* @param regex 占位符 例如:\\$\\{(.*?)\\}
* @return
*/
public static List extractToVar(String content, String regex) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
List varList = new ArrayList<>();
while (matcher.find()) {
varList.add(matcher.group(1));
}
return varList;
}
/**
* 根据原始信息占位符中的内容作为key,进行占位符替换
*
* @param content 原始信息
* @param regex 占位符正则 例如:\\$\\{(.*?)\\}
* @param startStr 占位符开始
* @param endStr 占位符结束
* @param map 获取替换进占位符中的内容
* @return
*/
public static String convertVar(String content, String regex, String startStr, String endStr, Map map) {
List varList = extractToVar(content, regex);
if (varList.size() > 0) {
for (String s : varList) {
if (map.containsKey(s) && null != map.get(s)) {
content = content.replace(startStr + s + endStr, map.get(s));
}
}
}
return content;
}
/**
* 根据原始信息占位符中的内容作为key,进行占位符替换
*
* @param content 原始信息
* @param varList 变量列表
* @param startStr 占位符开始
* @param endStr 占位符结束
* @param map 获取替换进占位符中的内容
* @return
*/
public static String convertToVar(String content, List varList, String startStr, String endStr, Map map) {
if (varList.size() > 0) {
for (String s : varList) {
if (map.containsKey(s) && null != map.get(s)) {
content = content.replace(startStr + s + endStr, map.get(s));
}
}
}
return content;
}
}
1.2、StrFormatter
package com.study.java8.util;
/**
* @Classname:StrFormatter
* @Description:TODO
* @Date:2023/9/9 9:40
* @Author:jsz15
*/
public class StrFormatter {
public static final String EMPTY_JSON = "{}";
public static final char C_BACKSLASH = '\\';
public static final char C_DELIM_START = '{';
public static final char C_DELIM_END = '}';
/**
* 格式化字符串
* 此方法只是简单将占位符 {} 按照顺序替换为参数
* 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
* 例:
* 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
* 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
* 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
*
* @param strPattern 字符串模板
* @param argArray 参数列表
* @return 结果
*/
public static String format(final String strPattern, final Object... argArray) {
if (StrUtils.isEmpty(strPattern) || StrUtils.isEmpty(argArray)) {
return strPattern;
}
final int strPatternLength = strPattern.length();
// 初始化定义好的长度以获得更好的性能
StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
int handledPosition = 0;
int delimIndex;// 占位符所在位置
for (int argIndex = 0; argIndex < argArray.length; argIndex++) {
delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
if (delimIndex == -1) {
if (handledPosition == 0) {
return strPattern;
} else { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果
sbuf.append(strPattern, handledPosition, strPatternLength);
return sbuf.toString();
}
} else {
if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) {
if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) {
// 转义符之前还有一个转义符,占位符依旧有效
sbuf.append(strPattern, handledPosition, delimIndex - 1);
sbuf.append(Convert.utf8Str(argArray[argIndex]));
handledPosition = delimIndex + 2;
} else {
// 占位符被转义
argIndex--;
sbuf.append(strPattern, handledPosition, delimIndex - 1);
sbuf.append(C_DELIM_START);
handledPosition = delimIndex + 1;
}
} else {
// 正常占位符
sbuf.append(strPattern, handledPosition, delimIndex);
sbuf.append(Convert.utf8Str(argArray[argIndex]));
handledPosition = delimIndex + 2;
}
}
}
// append the characters following the last {} pair.
// 加入最后一个占位符后所有的字符
sbuf.append(strPattern, handledPosition, strPattern.length());
return sbuf.toString();
}
}
1.3、Convert
package com.study.java8.util;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* @Description: 类型转换器
* @Author: jsz
* @date: 2023/9/9 11:12
*/
public class Convert {
/**
* 转换为字符串
* 如果给定的值为null,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static String toStr(Object value, String defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof String) {
return (String) value;
}
return value.toString();
}
/**
* 转换为字符串
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static String toStr(Object value) {
return toStr(value, null);
}
/**
* 转换为字符
* 如果给定的值为null,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Character toChar(Object value, Character defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof Character) {
return (Character) value;
}
final String valueStr = toStr(value, null);
return StrUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
}
/**
* 转换为字符
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Character toChar(Object value) {
return toChar(value, null);
}
/**
* 转换为byte
* 如果给定的值为null
,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Byte toByte(Object value, Byte defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Byte) {
return (Byte) value;
}
if (value instanceof Number) {
return ((Number) value).byteValue();
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Byte.parseByte(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为byte
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Byte toByte(Object value) {
return toByte(value, null);
}
/**
* 转换为Short
* 如果给定的值为null
,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Short toShort(Object value, Short defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Short) {
return (Short) value;
}
if (value instanceof Number) {
return ((Number) value).shortValue();
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Short.parseShort(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Short
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Short toShort(Object value) {
return toShort(value, null);
}
/**
* 转换为Number
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Number toNumber(Object value, Number defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Number) {
return (Number) value;
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return NumberFormat.getInstance().parse(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Number
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Number toNumber(Object value) {
return toNumber(value, null);
}
/**
* 转换为int
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Integer toInt(Object value, Integer defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Integer) {
return (Integer) value;
}
if (value instanceof Number) {
return ((Number) value).intValue();
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Integer.parseInt(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为int
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Integer toInt(Object value) {
return toInt(value, null);
}
/**
* 转换为Integer数组
*
* @param str 被转换的值
* @return 结果
*/
public static Integer[] toIntArray(String str) {
return toIntArray(",", str);
}
/**
* 转换为List数组
*
* @param str 被转换的值
* @return 结果
*/
public static List toListStrArray(String str) {
String[] stringArray = toStrArray(str);
List stringB = Arrays.asList(stringArray);
return stringB;
}
/**
* 转换为Long数组
*
* @param str 被转换的值
* @return 结果
*/
public static Long[] toLongArray(String str) {
return toLongArray(",", str);
}
/**
* 转换为Integer数组
*
* @param split 分隔符
* @param split 被转换的值
* @return 结果
*/
public static Integer[] toIntArray(String split, String str) {
if (StrUtils.isEmpty(str)) {
return new Integer[]{};
}
String[] arr = str.split(split);
final Integer[] ints = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) {
final Integer v = toInt(arr[i], 0);
ints[i] = v;
}
return ints;
}
/**
* 转换为Long数组
*
* @param split 是否忽略转换错误,忽略则给值null
* @param str 被转换的值
* @return 结果
*/
public static Long[] toLongArray(String split, String str) {
if (StrUtils.isEmpty(str)) {
return new Long[]{};
}
String[] arr = str.split(split);
final Long[] longs = new Long[arr.length];
for (int i = 0; i < arr.length; i++) {
final Long v = toLong(arr[i], null);
longs[i] = v;
}
return longs;
}
/**
* 转换为String数组
*
* @param str 被转换的值
* @return 结果
*/
public static String[] toStrArray(String str) {
return toStrArray(",", str);
}
/**
* 转换为String数组
*
* @param split 分隔符
* @param split 被转换的值
* @return 结果
*/
public static String[] toStrArray(String split, String str) {
return str.split(split);
}
/**
* 转换为long
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Long toLong(Object value, Long defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Long) {
return (Long) value;
}
if (value instanceof Number) {
return ((Number) value).longValue();
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
// 支持科学计数法
return new BigDecimal(valueStr.trim()).longValue();
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为long
* 如果给定的值为null
,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Long toLong(Object value) {
return toLong(value, null);
}
/**
* 转换为double
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Double toDouble(Object value, Double defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Double) {
return (Double) value;
}
if (value instanceof Number) {
return ((Number) value).doubleValue();
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
// 支持科学计数法
return new BigDecimal(valueStr.trim()).doubleValue();
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为double
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Double toDouble(Object value) {
return toDouble(value, null);
}
/**
* 转换为Float
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Float toFloat(Object value, Float defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Float) {
return (Float) value;
}
if (value instanceof Number) {
return ((Number) value).floatValue();
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Float.parseFloat(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Float
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Float toFloat(Object value) {
return toFloat(value, null);
}
/**
* 转换为boolean
* String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Boolean toBool(Object value, Boolean defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Boolean) {
return (Boolean) value;
}
String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
valueStr = valueStr.trim().toLowerCase();
switch (valueStr) {
case "true":
return true;
case "false":
return false;
case "yes":
return true;
case "ok":
return true;
case "no":
return false;
case "1":
return true;
case "0":
return false;
default:
return defaultValue;
}
}
/**
* 转换为boolean
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Boolean toBool(Object value) {
return toBool(value, null);
}
/**
* 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值
*
* @param clazz Enum的Class
* @param value 值
* @param defaultValue 默认值
* @return Enum
*/
public static > E toEnum(Class clazz, Object value, E defaultValue) {
if (value == null) {
return defaultValue;
}
if (clazz.isAssignableFrom(value.getClass())) {
@SuppressWarnings("unchecked")
E myE = (E) value;
return myE;
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Enum.valueOf(clazz, valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值null
*
* @param clazz Enum的Class
* @param value 值
* @return Enum
*/
public static > E toEnum(Class clazz, Object value) {
return toEnum(clazz, value, null);
}
/**
* 转换为BigInteger
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static BigInteger toBigInteger(Object value, BigInteger defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof BigInteger) {
return (BigInteger) value;
}
if (value instanceof Long) {
return BigInteger.valueOf((Long) value);
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return new BigInteger(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为BigInteger
* 如果给定的值为空,或者转换失败,返回默认值null
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static BigInteger toBigInteger(Object value) {
return toBigInteger(value, null);
}
/**
* 转换为BigDecimal
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof BigDecimal) {
return (BigDecimal) value;
}
if (value instanceof Long) {
return new BigDecimal((Long) value);
}
if (value instanceof Double) {
return new BigDecimal((Double) value);
}
if (value instanceof Integer) {
return new BigDecimal((Integer) value);
}
final String valueStr = toStr(value, null);
if (StrUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return new BigDecimal(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为BigDecimal
* 如果给定的值为空,或者转换失败,返回默认值
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static BigDecimal toBigDecimal(Object value) {
return toBigDecimal(value, null);
}
/**
* 将对象转为字符串
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @return 字符串
*/
public static String utf8Str(Object obj) {
return str(obj, CharsetKit.CHARSET_UTF_8);
}
/**
* 将对象转为字符串
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @param charsetName 字符集
* @return 字符串
*/
public static String str(Object obj, String charsetName) {
return str(obj, Charset.forName(charsetName));
}
/**
* 将对象转为字符串
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @param charset 字符集
* @return 字符串
*/
public static String str(Object obj, Charset charset) {
if (null == obj) {
return null;
}
if (obj instanceof String) {
return (String) obj;
} else if (obj instanceof byte[] || obj instanceof Byte[]) {
return str((Byte[]) obj, charset);
} else if (obj instanceof ByteBuffer) {
return str((ByteBuffer) obj, charset);
}
return obj.toString();
}
/**
* 将byte数组转为字符串
*
* @param bytes byte数组
* @param charset 字符集
* @return 字符串
*/
public static String str(byte[] bytes, String charset) {
return str(bytes, StrUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
}
/**
* 解码字节码
*
* @param data 字符串
* @param charset 字符集,如果此字段为空,则解码的结果取决于平台
* @return 解码后的字符串
*/
public static String str(byte[] data, Charset charset) {
if (data == null) {
return null;
}
if (null == charset) {
return new String(data);
}
return new String(data, charset);
}
/**
* 将编码的byteBuffer数据转换为字符串
*
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
*/
public static String str(ByteBuffer data, String charset) {
if (data == null) {
return null;
}
return str(data, Charset.forName(charset));
}
/**
* 将编码的byteBuffer数据转换为字符串
*
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
*/
public static String str(ByteBuffer data, Charset charset) {
if (null == charset) {
charset = Charset.defaultCharset();
}
return charset.decode(data).toString();
}
// ----------------------------------------------------------------------- 全角半角转换
/**
* 半角转全角
*
* @param input String.
* @return 全角字符串.
*/
public static String toSBC(String input) {
return toSBC(input, null);
}
/**
* 半角转全角
*
* @param input String
* @param notConvertSet 不替换的字符集合
* @return 全角字符串.
*/
public static String toSBC(String input, Set notConvertSet) {
char c[] = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (null != notConvertSet && notConvertSet.contains(c[i])) {
// 跳过不替换的字符
continue;
}
if (c[i] == ' ') {
c[i] = '\u3000';
} else if (c[i] < '\177') {
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}
/**
* 全角转半角
*
* @param input String.
* @return 半角字符串
*/
public static String toDBC(String input) {
return toDBC(input, null);
}
/**
* 替换全角为半角
*
* @param text 文本
* @param notConvertSet 不替换的字符集合
* @return 替换后的字符
*/
public static String toDBC(String text, Set notConvertSet) {
char c[] = text.toCharArray();
for (int i = 0; i < c.length; i++) {
if (null != notConvertSet && notConvertSet.contains(c[i])) {
// 跳过不替换的字符
continue;
}
if (c[i] == '\u3000') {
c[i] = ' ';
} else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
c[i] = (char) (c[i] - 65248);
}
}
String returnString = new String(c);
return returnString;
}
/**
* 数字金额大写转换 先写个完整的然后将如零拾替换成零
*
* @param n 数字
* @return 中文大写数字
*/
public static String digitUppercase(double n) {
String[] fraction = {"角", "分"};
String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}};
String head = n < 0 ? "负" : "";
n = Math.abs(n);
String s = "";
for (int i = 0; i < fraction.length; i++) {
s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if (s.length() < 1) {
s = "整";
}
int integerPart = (int) Math.floor(n);
for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
String p = "";
for (int j = 0; j < unit[1].length && n > 0; j++) {
p = digit[integerPart % 10] + unit[1][j] + p;
integerPart = integerPart / 10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$",
"零元整");
}
}
1.4、CharsetKit
package com.study.java8.util;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* @Description: 字符集工具类
* @Author: jsz
* @date: 2023/9/9 11:11
*/
public class CharsetKit {
/**
* ISO-8859-1
*/
public static final String ISO_8859_1 = "ISO-8859-1";
/**
* UTF-8
*/
public static final String UTF_8 = "UTF-8";
/**
* GBK
*/
public static final String GBK = "GBK";
/**
* ISO-8859-1
*/
public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
/**
* UTF-8
*/
public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
/**
* GBK
*/
public static final Charset CHARSET_GBK = Charset.forName(GBK);
/**
* 转换为Charset对象
*
* @param charset 字符集,为空则返回默认字符集
* @return Charset
*/
public static Charset charset(String charset) {
return StrUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
}
/**
* 转换字符串的字符集编码
*
* @param source 字符串
* @param srcCharset 源字符集,默认ISO-8859-1
* @param destCharset 目标字符集,默认UTF-8
* @return 转换后的字符集
*/
public static String convert(String source, String srcCharset, String destCharset) {
return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
}
/**
* 转换字符串的字符集编码
*
* @param source 字符串
* @param srcCharset 源字符集,默认ISO-8859-1
* @param destCharset 目标字符集,默认UTF-8
* @return 转换后的字符集
*/
public static String convert(String source, Charset srcCharset, Charset destCharset) {
if (null == srcCharset) {
srcCharset = StandardCharsets.ISO_8859_1;
}
if (null == destCharset) {
srcCharset = StandardCharsets.UTF_8;
}
if (StrUtils.isEmpty(source) || srcCharset.equals(destCharset)) {
return source;
}
return new String(source.getBytes(srcCharset), destCharset);
}
/**
* @return 系统字符集编码
*/
public static String systemCharset() {
return Charset.defaultCharset().name();
}
}
2、日期格式化处理工具类
2.1、ValidateUtils
package com.study.java8.util;
import java.util.Calendar;
import java.util.Collection;
import java.util.regex.Pattern;
/**
* @Classname:ValidateUtils
* @Description:字符串校验工具类
* @Date:2023/9/9 9:37
* @Author:jsz15
*/
public class ValidateUtils {
/**
* 字符串缺省状态
*/
private static final boolean DEFAULT_EMPTY_OK = false;
/**
* 数字chars
*/
private static final String DIGITS = "0123456789";
/**
* 小写字母chars
*/
public static final String LETTERS_LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
/**
* 小写字母chars + 数字
*/
public static final String LETTERS_LOWERCASE_DIGITS = LETTERS_LOWERCASE
+ DIGITS;
/**
* 大写字母chars
*/
public static final String LETTERS_UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/**
* 大写字母chars + 数字
*/
public static final String LETTERS_UPPERCASE_DIGITS = LETTERS_UPPERCASE + DIGITS;
/**
* 全部字母chars
*/
public static final String LETTERS = LETTERS_LOWERCASE + LETTERS_UPPERCASE;
/**
* 全部字母数字
*/
public static final String LETTERS_DIGITS = LETTERS + DIGITS;
/**
* 空白的chars (包括空格,\t,\n,\r)
*/
private static final String WHITE_SPACE = " \t\n\r";
/**
* 小数点
*/
private static final String DECIMAL_POING_DELIMITER = ".";
/**
* 电话号码里允许的不是数字的chars ,两边括号,横线,空格
*/
private static final String PHONE_NUMBER_DELIMITERS = "()- ";
/**
* 全球电话号码允许"+"号的chars
*/
private static final String VALID_PHONE_CHARS_WORLD = "+" + DIGITS + PHONE_NUMBER_DELIMITERS;
/**
* 手机号码允许"+"号和数字,但只允许第一个字符是+号,验证是检查是否第一个是,如果是去除再验证
*/
private static final String VALID_MSISDN_CHARS = DIGITS;
/**
* 手机号码允许的最大长度
*/
private static final int VALID_MSISDN_MAXLEN = 21;
/**
* 手机号码允许的最小长度
*/
private static final int VALID_MSISDN_MINLEN = 11;
/**
* 定义12月份对应的天数
*/
private static final int[] DAYS_IN_MONTH = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
/**
* 检查两个对象是否相等
*/
public static boolean isEqual(Object obj, Object obj2) {
return (obj == null) ? (obj2 == null) : obj.equals(obj2);
}
/**
* 检查字符串是否为空
*/
public static boolean isEmpty(Object obj) {
if (obj == null)
return true;
if (obj instanceof String)
return isEmpty((String) obj);
return false;
}
/**
* 检查字符串是否为空
*/
public static boolean isEmpty(String s) {
return ((s == null) || (s.trim().length() == 0));
}
/**
* 检查集合是否为空
*/
public static boolean isEmpty(Collection> c) {
return ((c == null) || (c.size() == 0));
}
/**
* 检查字符串是否不为空
*/
public static boolean isNotEmpty(String s) {
return ((s != null) && (s.trim().length() > 0));
}
/**
* 检查集合是否不为空
*/
public static boolean isNotEmpty(Collection> c) {
return ((c != null) && (c.size() > 0));
}
/**
* 如果s中存在c,则返回true,否则返回false
*/
public static boolean isCharInString(char c, String s) {
return (s.indexOf(c) != -1);
}
/**
* 检查字符是否是大写字母,(注:A-Z之间)
*/
public static boolean isLetterUppercase(char c) {
return LETTERS_UPPERCASE.indexOf(c) != -1;
}
/**
* 检查字符是否是大写字母加数字,(注:A-Z,0-9之间)
*/
public static boolean isLetterUppercaseDigits(char c) {
return LETTERS_UPPERCASE_DIGITS.indexOf(c) != -1;
}
/**
* 检查字符是否是小写字母,(注:a-z之间)
*/
public static boolean isLetterLowercase(char c) {
return LETTERS_LOWERCASE.indexOf(c) != -1;
}
/**
* 检查字符是否是小写字母加数字,(注:a-z,0-9之间)
*/
public static boolean isLetterLowercaseDigits(char c) {
return LETTERS_LOWERCASE_DIGITS.indexOf(c) != -1;
}
/**
* 检查字符是否是字母,(注:a-z,A-Z之间)
*/
public static boolean isLetter(char c) {
return LETTERS.indexOf(c) != -1;
}
/**
* 检查字符是否是数字
*/
public static boolean isDigit(char c) {
return DIGITS.indexOf(c) != -1;
}
/**
* 检查字符是否是数字或字母
*/
public static boolean isLetterOrDigit(char c) {
return LETTERS_DIGITS.indexOf(c) != -1;
}
/**
* 1\如果字符串为空或全是whitespace中的值则返回true,存在一个不是则返回false 2\见whitespace定义
* whitespace = " \t\n\r";(空格,\t,\n,\r)
*/
public static boolean isWhitespace(String s) {
if (isEmpty(s))
return true;
// 逐个字符检查,如果发现一个不是whitespace,则返回false
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (WHITE_SPACE.indexOf(c) == -1)
return false;
}
return true;
}
/**
* 检查是否是指定的长度,注:当s=null || s="",min=0时为true
*/
public static boolean isLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
return (s.length() >= min && s.length() <= max);
}
/**
* 检查是否GBK编码长度,数据库一般是一个汉字两个字节
*/
public static boolean isByteLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
int len = 0;
try {
len = s.getBytes("GBK").length;
} catch (Exception e) {
len = s.getBytes().length;
}
return (len >= min && len <= max);
}
/**
* 检查是否指定编码长度,UTF-8是一个汉字3个字节,GBK是两个
*/
public static boolean isByteLen(String s, int min, int max, String encoding) {
if (isEmpty(s))
return min == 0 ? true : false;
int len = 0;
try {
len = s.getBytes(encoding).length;
} catch (Exception e) {
len = s.getBytes().length;
}
return (len >= min && len <= max);
}
/**
* 检查是否是整型
*/
public static boolean isInteger(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
// 逐个检查,如果出现一个字符不是数字则返回false
for (int i = 0; i < s.length(); i++) {
if (!isDigit(s.charAt(i)))
return false;
}
return true;
}
/**
* 检查是否是带符号的整型(允许第一个字符为"+,-",不接受浮点".",指数"E"等
*/
public static boolean isSignedInteger(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
Integer.parseInt(s);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 检查是否是带符号的长整型(允许第一个字符为"+,-",不接受浮点".",指数"E"等
*/
public static boolean isSignedLong(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
Long.parseLong(s);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 检查是否是一个正整数
*/
public static boolean isPositiveInteger(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
long temp = Long.parseLong(s);
if (temp > 0)
return true;
return false;
} catch (Exception e) {
return false;
}
}
/**
* 检查是否是一个非负整数
*/
public static boolean isNonnegativeInteger(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
int temp = Integer.parseInt(s);
if (temp >= 0)
return true;
return false;
} catch (Exception e) {
return false;
}
}
/**
* 检查是否是一个负整数
*/
public static boolean isNegativeInteger(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
int temp = Integer.parseInt(s);
if (temp < 0)
return true;
return false;
} catch (Exception e) {
return false;
}
}
/**
* 检查是否是一个非正整数
*/
public static boolean isNonpositiveInteger(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
int temp = Integer.parseInt(s);
if (temp <= 0)
return true;
return false;
} catch (Exception e) {
return false;
}
}
/**
* 检查字符串是否是整型,且在a,b之间,>=a,<=b
*/
public static boolean isIntegerInRange(String s, int a, int b) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
if (!isSignedInteger(s))
return false;
int num = Integer.parseInt(s);
return ((num >= a) && (num <= b));
}
/**
* 检查字符串是否是正整型,且在a,b之间,>=a,<=b
*/
public static boolean isIntegerInRangeLen(String s, int a, int b) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
if (!isInteger(s))
return false;
return ((s.length() >= a) && (s.length() <= b));
}
/**
* 是否是Unicode码
*/
public static final boolean isUnicode(String str) {
if (isEmpty(str))
return false;
int len = str.length();
for (int i = 0; i < len; i++) {
if ((int) str.charAt(i) > 128)
return true;
}
if (str.length() == 1) {
if (((int) str.charAt(0)) > 128)
return true;
}
return false;
}
/**
* 检查是否是一个无符号的浮点型,不支持指点E
*/
public static boolean isFloat(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
if (s.startsWith(DECIMAL_POING_DELIMITER))
return false;
// 只允许一个点.
boolean seenDecimalPoint = false;
// 逐个字符检查
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (isDigit(c))
continue;
if (c == DECIMAL_POING_DELIMITER.charAt(0)) {
if (!seenDecimalPoint) {
seenDecimalPoint = true;
continue;
}
}
return false;
}
return true;
}
/**
* 检查是否是一个允许符号的浮点型,允许符号"+","-"
*/
public static boolean isSignedFloat(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
float temp = Float.parseFloat(s);
if (temp <= 0)
return true;
return false;
} catch (Exception e) {
return false;
}
}
/**
* 检查是否是一个允许符号的双精度浮点型,允许符号"+","-"
*/
public static boolean isSignedDouble(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
try {
Double.parseDouble(s);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 检查字符串是否都是由字母组成
*/
public static boolean isAlphabetic(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isLetter(c))
return false;
}
return true;
}
/**
* 检查字符串是否都是由小写字母组成
*/
public static boolean isAlphabeticLowercase(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isLetterLowercase(c))
return false;
}
return true;
}
/**
* 检查字符串是否都是由大写字母组成
*/
public static boolean isAlphabeticUppercase(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isLetterUppercase(c))
return false;
}
return true;
}
/**
* 检查字符串是否都是由字母组成且长度在min,max范围内
*/
public static boolean isAlphabeticLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
if (!isAlphabetic(s))
return false;
if (s.length() < min || s.length() > max)
return false;
return true;
}
/**
* 检查字符串是否都是由小写字母组成且长度在min,max范围内
*/
public static boolean isAlphabeticLowercaseLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
if (!isAlphabeticLowercase(s))
return false;
if (s.length() < min || s.length() > max)
return false;
return true;
}
/**
* 检查字符串是否都是由大字母组成且长度在min,max范围内
*/
public static boolean isAlphabeticUpperLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
if (!isAlphabeticUppercase(s))
return false;
if (s.length() < min || s.length() > max)
return false;
return true;
}
/**
* 检查字符串是否都是由字母或数字组成
*/
public static boolean isAlphanumeric(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isLetterOrDigit(c))
return false;
}
return true;
}
/**
* 检查字符串是否都是由字母或数字组成且长度在min,max范围内
*/
public static boolean isAlphanumericLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
if (!isAlphanumeric(s))
return false;
if (s.length() < min || s.length() > max)
return false;
return true;
}
/**
* 检查字符串是否都是由大写字母或数字组成
*/
public static boolean isAlphaUpperNumeric(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isLetterUppercaseDigits(c))
return false;
}
return true;
}
/**
* 检查字符串是否都是由大写字母或数字组成
*/
public static boolean isAlphaLowerNumeric(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isLetterLowercaseDigits(c))
return false;
}
return true;
}
/**
* 检查字符串是否都是由大写字母或数字组成
*/
public static boolean isAlphaUpperNumericLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
if (!isAlphaUpperNumeric(s))
return false;
if (s.length() < min || s.length() > max)
return false;
return true;
}
/**
* 检查字符串是否都是由小写字母或数字组成
*/
public static boolean isAlphaLowerNumericLen(String s, int min, int max) {
if (isEmpty(s))
return min == 0 ? true : false;
if (!isAlphaLowerNumeric(s))
return false;
if (s.length() < min || s.length() > max)
return false;
return true;
}
/**
* 检查字符串是否正确的邮政编码
*/
public static boolean isZipCode(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
if (s.length() != 6 || !isInteger(s))
return false;
return true;
}
public static boolean isMoneyTwoRadix(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
// 去除负号
if (s.startsWith("-"))
s = s.substring(1);
int ind = s.indexOf(".");
if (ind == -1)
return isInteger(s);// 如果没有点号,则判断是否是整数
if (ind == 0)
return false;
String integer = s.substring(0, ind);
String radix = s.substring(ind + 1);
if (!isInteger(integer) || !isIntegerInRangeLen(radix, 2, 2))
return false;// 如果整数部分不是整数,小数部分不是整数,或小数部分不是两位
return true;
}
/**
* 检查字符串是否正确的邮件地址(注:要求存在@字符,且不是出现在第一个,最后一个位置,现在不检查是否存在".")
*/
public static boolean isEmail(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
if (isWhitespace(s))
return false;
int indexLeft = s.indexOf('@');
int indexRight = s.lastIndexOf('@');
// 如果不存在@,或不止一个,或第一个,或最后一个
if (indexLeft < 1 || indexLeft != indexRight || indexLeft == s.length())
return false;
return true;
}
/**
* 检查是否是正确的年
*/
public static boolean isYear(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
if (!isNonnegativeInteger(s))
return false;
return ((s.length() == 2) || (s.length() == 4));
}
/**
* 判断是否是周末 yyyy-MM-dd
*/
public static boolean isWeekend(String date) {
Calendar calendar = DateTimeUtils.toCalendar(date + " 00:00:01");
return calendar.get(Calendar.DAY_OF_WEEK) == 1;
}
/**
* 判断是否季度末 yyyy-MM-dd
*/
public static boolean isMonthQuarter(String date) {
if (!isDate(date))
return false;
String year = date.substring(0, 4);
String month = date.substring(5, 7);
String day = date.substring(8);
if (!isMonthLastDay(year, month, day))
return false;
if (month.equals("03") || month.equals("06") || month.equals("09")
|| month.equals("12"))
return true;
return false;
}
/**
* 判断是否年末 yyyy-MM-dd
*/
public static boolean isYearLastDay(String date) {
if (!isDate(date))
return false;
String year = date.substring(0, 4);
String month = date.substring(5, 7);
String day = date.substring(8);
if (!isMonthLastDay(year, month, day))
return false;
if (month.equals("12"))
return true;
return false;
}
/**
* 检查是否是正确的月
*/
public static boolean isMonth(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
return isIntegerInRange(s, 1, 12);
}
/**
* 检查是否是正确的日
*/
public static boolean isDay(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
return isIntegerInRange(s, 1, 31);
}
/**
* 检查是否闰年
*/
public static boolean isLeapYear(int year) {
return (year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0));
}
/**
* 检查是否是月末 yyyy-MM-dd HH:mm:ss
*/
public static boolean isMonthLastDay(String date) {
if (!isDate(date))
return false;
String year = date.substring(0, 4);
String month = date.substring(5, 7);
String day = date.substring(8);
return isMonthLastDay(year, month, day);
}
/**
* 检查是否是月末
*/
public static boolean isMonthLastDay(String year, String month, String day) {
if (!isDate(year, month, day))
return false;
int yearInt = Integer.parseInt(year);
int monthInt = Integer.parseInt(month);
int dayInt = Integer.parseInt(day);
return isMonthLastDay(yearInt, monthInt, dayInt);
}
/**
* 检查是否是月末
*/
public static boolean isMonthLastDay(int year, int month, int day) {
if (year < 1000 || year > 9999 || month > 12 || month < 1 || day > 31
|| day < 1)
return false;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return day == 31;
case 4:
case 6:
case 9:
case 11:
return day == 30;
default:// 2月
boolean isLeapYear = ValidateUtils.isLeapYear(year);
return isLeapYear ? day == 29 : day == 28;
}
}
/**
* 检查是否是正确的时
*/
public static boolean isHour(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
return isIntegerInRange(s, 0, 23);
}
/**
* 检查是否是正确的分
*/
public static boolean isMinute(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
return isIntegerInRange(s, 0, 59);
}
/**
* 检查是否是正确的秒
*/
public static boolean isSecond(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
return isIntegerInRange(s, 0, 59);
}
/**
* 检查是否是正确的日期
*/
public static boolean isDate(String year, String month, String day) {
if (!(isYear(year) && isMonth(month) && isDay(day)))
return false;
int intYear = Integer.parseInt(year);
int intMonth = Integer.parseInt(month);
int intDay = Integer.parseInt(day);
if (intDay > DAYS_IN_MONTH[intMonth - 1])
return false;
if ((intMonth == 2) && (intDay > (isLeapYear(intYear) ? 29 : 28)))
return false;
return true;
}
/**
* 检查是否是正确的日期
*/
public static boolean isDate(String date) {
if (isEmpty(date))
return DEFAULT_EMPTY_OK;
if (date.length() != 10)
return DEFAULT_EMPTY_OK;
int dateSlash1 = date.indexOf("-");
int dateSlash2 = date.lastIndexOf("-");
if (dateSlash1 <= 0 || dateSlash1 == dateSlash2)
return false;
String year = date.substring(0, dateSlash1);
String month = date.substring(dateSlash1 + 1, dateSlash2);
String day = date.substring(dateSlash2 + 1);
return isDate(year, month, day);
}
/**
* 判断是不是指定的时间格式
*/
public static boolean isDateTime(String datetime) {
if (isEmpty(datetime))
return false;
datetime = datetime.trim();
String[] strs = datetime.split(" ");
if (strs.length != 2)
return false;
return isDate(strs[0]) && isTime(strs[1]);
}
/**
* 判断是不是指定的时间格式, spe为日期分隔符
*/
public static boolean isDateTime(String datetime, String spe) {
if (isEmpty(datetime))
return false;
datetime = datetime.trim();
String[] strs = datetime.split(" ");
if (strs.length != 2)
return false;
return isDate(strs[0].replaceAll(spe, "-")) && isTime(strs[1]);
}
/**
* 检查是否是西方正确的日期
*/
public static boolean isEnglishDate(String date) {
if (isEmpty(date))
return DEFAULT_EMPTY_OK;
int dateSlash1 = date.indexOf("/");
int dateSlash2 = date.lastIndexOf("/");
if (dateSlash1 <= 0 || dateSlash1 == dateSlash2)
return false;
String month = date.substring(0, dateSlash1);
String day = date.substring(dateSlash1 + 1, dateSlash2);
String year = date.substring(dateSlash2 + 1);
return isDate(year, month, day);
}
/**
* 检查是否是日期比今天大
*/
public static boolean isDateAfterToday(String date) {
if (isDate(date))
return DEFAULT_EMPTY_OK;
java.util.Date passed = DateTimeUtils.toDate(date, "00:00:00");
java.util.Date now = DateTimeUtils.nowDate();
return passed.after(now);
}
/**
* 检查是否是正确的时间
*/
public static boolean isTime(String hour, String minute, String second) {
if (isHour(hour) && isMinute(minute) && isSecond(second))
return true;
return false;
}
/**
* 检查是否是正确的时间
*/
public static boolean isTime(String time) {
if (isEmpty(time))
return DEFAULT_EMPTY_OK;
int timeColon1 = time.indexOf(":");
int timeColon2 = time.lastIndexOf(":");
if (timeColon1 <= 0 || timeColon1 == timeColon2)
return false;
String hour = time.substring(0, timeColon1);
String minute = time.substring(timeColon1 + 1, timeColon2);
String second = time.substring(timeColon2 + 1);
return isTime(hour, minute, second);
}
/**
* 检查是否是正确的电话号码
*/
public static boolean isPhone(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
// 逐个字符检查,如果发现一个不是whitespace,则返回false
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isCharInString(c, VALID_PHONE_CHARS_WORLD))
return false;
}
return true;
}
/**
* 检查是否是正确的手机号码
*/
public static boolean isMsisdn(String s) {
if (isEmpty(s))
return DEFAULT_EMPTY_OK;
// 如果第一个是+号,则去除
if (s.charAt(0) == '+')
s = s.substring(1);
if (s.length() > VALID_MSISDN_MAXLEN
|| s.length() < VALID_MSISDN_MINLEN)
return false;
// 逐个字符检查,如果发现一个不是VALID_MSISDN_CHARS,则返回false
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!isCharInString(c, VALID_MSISDN_CHARS))
return false;
}
return true;
}
/**
* 判断号码是否符合配置文件所设条件
*
* @param phone 号码字符串
* @return boolean =true 是手机号码,=false 非手机号码
* @oaram prefixs 固定前三个的前缀,如135,136,159等,多个用逗号隔开
*/
public static boolean isMsisdn11(String phone, String prefixs) {
if (!isIntegerInRangeLen(phone, 11, 11))
return false;
String[] prefixArr = prefixs.split(",");
for (int i = 0; i < prefixArr.length; i++) {
if (phone.startsWith(prefixArr[i]))
return true;
}
return false;
}
/**
* 判断号码是否符合配置文件所设条件
*
* @param phone 号码字符串
* @param prefixs 前缀数组,如135,137,+86,0086,17951135等,多个用逗号隔开
* @return boolean =true 是手机号码,=false 非手机号码
*/
public static boolean isMsisdn21(String phone, String prefixs) {
if (!isMsisdn(phone))
return false;
String[] prefixArr = prefixs.split(",");
for (int i = 0; i < prefixArr.length; i++) {
if (phone.length() != prefixArr[i].length() + 8)
continue;
if (phone.startsWith(prefixArr[i]))
return true;
}
return false;
}
/**
* 检查是否是IP地址,ip为空返回false;
*/
public static boolean isIP(String ip) {
return isIP(ip, false);
}
/**
* 检查是否是IP地址
*/
public static boolean isIP(String ip, boolean allowEmpty) {
if (isEmpty(ip))
return allowEmpty;
try {
int ind1 = ip.indexOf('.');
if (ind1 == -1)
return false;
String str1 = ip.substring(0, ind1);
if (!ValidateUtils.isIntegerInRange(str1, 0, 255))
return false;
int ind2 = ip.indexOf('.', ind1 + 1);
if (ind2 == -1)
return false;
String str2 = ip.substring(ind1 + 1, ind2);
if (!ValidateUtils.isIntegerInRange(str2, 0, 255))
return false;
int ind3 = ip.indexOf('.', ind2 + 1);
if (ind3 == -1)
return false;
String str3 = ip.substring(ind2 + 1, ind3);
if (!ValidateUtils.isIntegerInRange(str3, 0, 255))
return false;
String str4 = ip.substring(ind3 + 1);
if (!ValidateUtils.isIntegerInRange(str4, 0, 255))
return false;
} catch (Exception e) {
return false;
}
return true;
}
/**
* 检查是否是macAddress,macAddress为空返回false;
*/
public static boolean isMacAddress(String macAddress) {
return isMacAddress(macAddress, false);
}
/**
* 检查是否是IP地址
*/
public static boolean isMacAddress(String macAddress, boolean allowEmpty) {
if (isEmpty(macAddress))
return allowEmpty;
return isRegExp(
macAddress,
"^[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}$");
}
/**
* 检查是否邮编
*/
public static boolean isPostalCode(String s) {
if (!isInteger(s) || s.trim().length() != 6)
return false;
return true;
}
/**
* 检查是否在指定的字符串内
*/
public static boolean isScope(String s, String scope) {
if (ValidateUtils.isEmpty(s))
return ValidateUtils.DEFAULT_EMPTY_OK;
// 逐个字符检查,如果发现一个不是specifyStr,则返回false
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!ValidateUtils.isCharInString(c, scope))
return false;
}
return true;
}
/**
* 检查value是否符合指定的pattern
*/
public static boolean isRegExp(String value, String regExp) {
if (regExp.startsWith("/"))
regExp = regExp.substring(1);
if (regExp.endsWith("/"))
regExp = regExp.substring(0, regExp.length() - 1);
return Pattern.matches(regExp, value);
}
/**
* 检查src是否包含字符串数组任何一个
*/
public static boolean isStrContainStrArr(String src, String[] strs) {
for (String str : strs) {
if (src.contains(str.trim()))
return true;
}
return false;
}
/**
* 检查src是否包含字符串数组任何一个
*/
public static boolean isStrContainStrArr(String src, String strArr,
String delm) {
return isStrContainStrArr(src, strArr.split(delm));
}
}
2.2、DateTimeUtils
package com.study.java8.util;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @Description: 时间处理工具类
* @Author: jsz
* @date: 2023/9/9 11:13
*/
public class DateTimeUtils {
public static final SimpleDateFormat FORMAT_YYYY_MM_DDHHMMSSSSS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public static final SimpleDateFormat FORMAT_YYYY_MM_DDHHMMSS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final SimpleDateFormat FORMAT_YYYY_MM_DD = new SimpleDateFormat("yyyy-MM-dd");
public static final SimpleDateFormat FORMAT_YYYY_MM = new SimpleDateFormat("yyyy-MM");
public static final SimpleDateFormat FORMAT_YYYYMMDDHHMMSS17 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
public static final SimpleDateFormat FORMAT_YYYYMMDDHHMMSS14 = new SimpleDateFormat("yyyyMMddHHmmss");
public static final SimpleDateFormat FORMAT_YYMMDDHHMMSS12 = new SimpleDateFormat("yyMMddHHmmss");
public static final SimpleDateFormat FORMAT_YYYYMMDD8 = new SimpleDateFormat("yyyyMMdd");
public static final SimpleDateFormat FORMAT_YYYYMM6 = new SimpleDateFormat("yyyyMM");
public static final SimpleDateFormat FORMAT_HHMMSS8 = new SimpleDateFormat("HH:mm:ss");
/**
* 返回当前时间的Date
*/
public static Date nowDate() {
return new Date();
}
/**
* 字符串转为时间,字符串符合标准格式:"YYYY-MM-DD HH:MM:SS"
*
* @param dateTime 标准时间格式 "YYYY-MM-DD HH:MM:SS"
* @return java.util.Date
*/
public static Date toDate(String dateTime) {
if (dateTime.length() > "YYYY-MM-DD HH:MM:SS".length())
dateTime = dateTime.substring(0, "YYYY-MM-DD HH:MM:SS".length());
int index = dateTime.indexOf(" ");
String date = dateTime.substring(0, index);
String time = dateTime.substring(index + 1);
return toDate(date, time);
}
/**
* 字符串转为时间,字符串符合标准日期格式:"YYYY-MM-DD",和标准时间格式:"HH:MM:SS"
*
* @param date 标准日期格式 "YYYY-MM-DD"
* @param time 标准时间格式 "HH:MM:SS"
* @return java.util.Date
*/
public static Date toDate(String date, String time) {
if (date == null || time == null)
return null;
int dateSlash1 = date.indexOf("-");
int dateSlash2 = date.lastIndexOf("-");
if (dateSlash1 <= 0 || dateSlash1 == dateSlash2)
return null;
int timeColon1 = time.indexOf(":");
int timeColon2 = time.lastIndexOf(":");
if (timeColon1 <= 0 || timeColon1 == timeColon2)
return null;
String year = date.substring(0, dateSlash1);
String month = date.substring(dateSlash1 + 1, dateSlash2);
String day = date.substring(dateSlash2 + 1);
String hour = time.substring(0, timeColon1);
String minute = time.substring(timeColon1 + 1, timeColon2);
String second = time.substring(timeColon2 + 1);
;
return toDate(year, month, day, hour, minute, second);
}
/**
* 通过标准时间输入,年,月,日,时,分,秒,生成java.util.Date
*
* @param yearStr 年
* @param monthStr 月
* @param dayStr 日
* @param hourStr 时
* @param minuteStr 分
* @param secondStr 秒
* @return java.util.Date
*/
public static Date toDate(String yearStr, String monthStr,
String dayStr, String hourStr, String minuteStr, String secondStr) {
int year, month, day, hour, minute, second;
try {
year = Integer.parseInt(yearStr);
month = Integer.parseInt(monthStr);
day = Integer.parseInt(dayStr);
hour = Integer.parseInt(hourStr);
minute = Integer.parseInt(minuteStr);
second = Integer.parseInt(secondStr);
} catch (Exception e) {
return null;
}
return toDate(year, month, day, hour, minute, second);
}
/**
* 通过标准时间输入,年,月,日,时,分,秒,生成java.util.Date
*
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param minute 分
* @param second 秒
* @return java.util.Date
*/
public static Date toDate(int year, int month, int day, int hour,
int minute, int second) {
Calendar calendar = Calendar.getInstance();
try {
calendar.set(year, month - 1, day, hour, minute, second);
} catch (Exception e) {
return null;
}
return calendar.getTime();
}
/**
* 生成标准格式的字符串 格式为: "MM-DD-YYYY HH:MM:SS"
*
* @param date The Date
* @return 生成默认格式的字符串 格式为: "MM-DD-YYYY HH:MM:SS"
*/
public static String toDateTimeString(Date date) {
if (date == null)
return "";
String dateString = toDateString(date);
String timeString = toTimeString(date);
if (dateString == null || timeString == null)
return "";
return dateString + " " + timeString;
}
/**
* 生成标准日期,格式为 YYYY+spe+MM+spe+DD
*
* @param date The Date
* @return 生成日期, 格式为 YYYY+spe+MM+spe+DD
*/
public static String toDateString(Date date, String spe) {
if (date == null)
return "";
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int year = calendar.get(Calendar.YEAR);
String monthStr = "" + month;
String dayStr = "" + day;
String yearStr = "" + year;
if (month < 10)
monthStr = "0" + month;
if (day < 10)
dayStr = "0" + day;
return yearStr + spe + monthStr + spe + dayStr;
}
/**
* 生成标准日期,格式为 YYYY-MM-DD
*
* @param date The Date
* @return 生成日期, 格式为 YYYY-MM-DD
*/
public static String toDateString(Date date) {
return toDateString(date, "-");
}
/**
* 根据输入的时间,生成时间格式 HH:MM:SS
*
* @param date java.util.Date
* @return 生成时间格式为 HH:MM:SS
*/
public static String toTimeString(Date date) {
if (date == null)
return "";
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return toTimeString(calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
}
/**
* 根据输入的时,分,秒,生成时间格式 HH:MM:SS
*
* @param hour 时
* @param minute 分
* @param second 秒
* @return 生成时间格式为 HH:MM:SS
*/
public static String toTimeString(int hour, int minute, int second) {
String hourStr = "" + hour;
String minuteStr = "" + minute;
String secondStr = "" + second;
if (hour < 10)
hourStr = "0" + hour;
if (minute < 10)
minuteStr = "0" + minute;
if (second < 10)
secondStr = "0" + second;
return hourStr + ":" + minuteStr + ":" + secondStr;
}
/**
* 取得给定日历,给定格式的日期字符串
*
* @param calendar 日历,给定一个日历
* @return String 取得默认的日期时间字符串"yyyy-MM-dd"
*/
public static String toDateString(Calendar calendar) {
return FORMAT_YYYY_MM_DD.format(calendar.getTime());
}
/**
* 取得给定日历,给定格式的日期时间字符串
*
* @param calendar 日历,给定一个日历
* @return String 取得默认的日期时间字符串"yyyy-MM-dd HH:mm:ss"
*/
public static String toDateTimeString(Calendar calendar) {
return FORMAT_YYYY_MM_DDHHMMSS.format(calendar.getTime());
}
/**
* 取得给定日历,给定格式的日期时间字符串
*
* @param calendar 日历,给定一个日历
* @param format 格式,如String format = "yyyy-MM-dd HH:mm:ss";
* @return String 取得给定日历,给定格式的日期时间字符串
*/
public static String toDateTimeString(Calendar calendar, String format) {
return toDateTimeString(calendar.getTime(), format);
}
/**
* 取得给定时间,给定格式的日期时间字符串,标准格式:"yyyy-MM-dd HH:mm:ss";
*
* @param datetime 日期,给定一个时间的毫秒数
* @return String 取得给定时间,给定格式的日期时间字符串
*/
public static String toDateTimeString(long datetime) {
return FORMAT_YYYY_MM_DDHHMMSS.format(new Date(datetime));
}
/**
* 取得给定时间,给定格式的日期时间字符串,标准格式:"yyyy-MM-dd HH:mm:ss.SSS";
*
* @param datetime 日期,给定一个时间的毫秒数
* @return String 取得给定时间,给定格式的日期时间字符串
*/
public static String toDateTimeString2(long datetime) {
return FORMAT_YYYY_MM_DDHHMMSSSSS.format(new Date(datetime));
}
/**
* 取得给定时间,给定格式的日期时间字符串
*
* @param datetime 日期,给定一个时间的毫秒数
* @param format 格式,如String format = "yyyy-MM-dd HH:mm:ss";
* @return String 取得给定时间,给定格式的日期时间字符串
*/
public static String toDateTimeString(long datetime, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date(datetime));
}
/**
* 取得给定时间,给定格式的日期时间字符串
*
* @param date 日期,给定一个时间
* @param format 格式,如String format = "yyyy-MM-dd HH:mm:ss";
* @return String 取得给定时间,给定格式的日期时间字符串
*/
public static String toDateTimeString(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 取得当前的日期时间字符串
*
* @param format 格式,如String format = "yyyy-MM-dd HH:mm:ss";
* @return String 取得当前的日期时间字符串
*/
public static String getDateTimeString(String format) {
return toDateTimeString(new Date(), format);
}
/**
* 取得当前的日期时间字符串yyyy-MM-dd HH:mm:ss
*
* @return String 取得当前的日期时间字符串YYYY-MM-DD HH:mm:ss
*/
public static String getDateTimeString() {
return FORMAT_YYYY_MM_DDHHMMSS.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYYY/MM/DD HH:mm:ss (移动)
*
* @return String 取得当前的日期时间字符串YYYY/MM/DD HH:mm:ss
*/
public static String getDateTimeString2() {
String format = "yyyy/MM/dd HH:mm:ss";
return getDateTimeString(format);
}
/**
* 取得当前的日期时间字符串yyyy-MM-dd HH:mm:ss.SSS
*
* @return String 取得当前的日期时间字符串YYYY-MM-DD HH:mm:ss.SSS
*/
public static String getDateTimeString3() {
return FORMAT_YYYY_MM_DDHHMMSSSSS.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYYY/MM/DD (移动)
*
* @return String 取得当前的日期时间字符串YYYY/MM/DD
*/
public static String getDateString2() {
String format = "yyyy/MM/dd";
return getDateTimeString(format);
}
/**
* 取得当前的日期时间字符串yyyyMMddHHmmss
*
* @return String 取得当前的日期时间字符串yyyyMMddHHmmss
*/
public static String getDateTime14String() {
return FORMAT_YYYYMMDDHHMMSS14.format(nowDate());
}
/**
* 取得当前的日期时间字符串yyyyMMddHHmmssSSS
*
* @return String 取得当前的日期时间字符串yyyyMMddHHmmssSSS
*/
public static String getDateTime17String() {
return FORMAT_YYYYMMDDHHMMSS17.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYMMDDHHMISS
*
* @return String 取得当前的日期时间字符串YYMMDDHHMISS
*/
public static String getDateTime12String() {
return FORMAT_YYMMDDHHMMSS12.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYYYMMDD
*
* @return String 取得当前的日期时间字符串
*/
public static String getDateTime8String() {
return FORMAT_YYYYMMDD8.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYYY-MM
*
* @return String 取得当前的日期时间字符串
*/
public static String getDateTime7String() {
return FORMAT_YYYY_MM.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYYYMM
*
* @return String 取得当前的日期时间字符串
*/
public static String getDateTime6String() {
return FORMAT_YYYYMM6.format(nowDate());
}
/**
* 取得当前的日期时间字符串YYYY-MM-DD
*
* @return String 取得当前的日期时间字符串
*/
public static String getDateString() {
return FORMAT_YYYY_MM_DD.format(nowDate());
}
/**
* 取得当前的日期时间字符串HH:mm:ss
*
* @return String 取得当前的日期时间字符串
*/
public static String getTimeString() {
return FORMAT_HHMMSS8.format(nowDate());
}
/**
* 取得当前的日期整型数组共7项,分别为年,月,日,时,分,秒,毫秒
*
* @return int[] 共7项,分别为年,月,日,时,分,秒,毫秒
*/
public static int[] getDateTimes() {
int[] dates = new int[7];
Calendar calendar = Calendar.getInstance();
dates[0] = calendar.get(Calendar.YEAR);
dates[1] = calendar.get(Calendar.MONTH) + 1;
dates[2] = calendar.get(Calendar.DAY_OF_MONTH);
dates[3] = calendar.get(Calendar.HOUR_OF_DAY);
dates[4] = calendar.get(Calendar.MINUTE);
dates[5] = calendar.get(Calendar.SECOND);
dates[6] = calendar.get(Calendar.MILLISECOND);
return dates;
}
/**
* 通过标准时间输入,年,月,日,时,分,秒,生成java.util.Date
*
* @param yearStr 年
* @param monthStr 月
* @param dayStr 日
* @param hourStr 时
* @param minuteStr 分
* @param secondStr 秒
* @return Calendar
*/
public static Calendar toCalendar(String yearStr, String monthStr,
String dayStr, String hourStr, String minuteStr, String secondStr) {
int year, month, day, hour, minute, second;
try {
year = Integer.parseInt(yearStr);
month = Integer.parseInt(monthStr);
day = Integer.parseInt(dayStr);
hour = Integer.parseInt(hourStr);
minute = Integer.parseInt(minuteStr);
second = Integer.parseInt(secondStr);
} catch (Exception e) {
return null;
}
return toCalendar(year, month, day, hour, minute, second);
}
/**
* 通过String,组织一个日历
*
* @param datetime
* @return 通过整型数组, 返回一个日历
*/
public static Calendar toCalendar(String datetime) {
int index = datetime.indexOf(" ");
String date = datetime.substring(0, index);
String time = datetime.substring(index + 1);
int dateSlash1 = date.indexOf("-");
int dateSlash2 = date.lastIndexOf("-");
if (dateSlash1 <= 0 || dateSlash1 == dateSlash2)
return null;
int timeColon1 = time.indexOf(":");
int timeColon2 = time.lastIndexOf(":");
if (timeColon1 <= 0 || timeColon1 == timeColon2)
return null;
String yearStr = date.substring(0, dateSlash1);
String monthStr = date.substring(dateSlash1 + 1, dateSlash2);
String dayStr = date.substring(dateSlash2 + 1);
String hourStr = time.substring(0, timeColon1);
String minuteStr = time.substring(timeColon1 + 1, timeColon2);
String secondStr = time.substring(timeColon2 + 1);
;
int year, month, day, hour, minute, second;
try {
year = Integer.parseInt(yearStr);
month = Integer.parseInt(monthStr);
day = Integer.parseInt(dayStr);
hour = Integer.parseInt(hourStr);
minute = Integer.parseInt(minuteStr);
second = Integer.parseInt(secondStr);
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day, hour, minute, second);
return calendar;
} catch (Exception e) {
return null;
}
}
/**
* 通过整型数组,组织一个日历
*
* @param dates
* @return 通过整型数组, 返回一个日历
*/
public static Calendar toCalendar(int[] dates) {
if (dates == null || dates.length < 6)
return null;
return toCalendar(dates[0], dates[1], dates[2], dates[3], dates[4],
dates[5]);
}
/**
* 通过标准时间输入,年,月,日,时,分,秒,生成java.util.Date
*
* @param year 年
* @param month 月
* @param day 日
* @param hour 时
* @param minute 分
* @param second 秒
* @return Calendar
*/
public static Calendar toCalendar(int year, int month, int day, int hour,
int minute, int second) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month - 1);
c.set(Calendar.DATE, day);
c.set(Calendar.HOUR_OF_DAY, hour);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, second);
return c;
}
/**
* 通过整型数组,组织一个日期
*
* @param dates
* @return 通过整型数组, 组织一个日期
*/
public static Date toDate(int[] dates) {
if (dates == null || dates.length < 6)
return null;
return toCalendar(dates).getTime();
}
/**
* 获取当前年
*
* @return 当前年
*/
public static int getCurrentYear() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR);
}
/**
* 获取当前月份
*
* @return 月份
*/
public static int getCurrentMonth() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 获取当前月天数
*/
public static int getCurrentMonthDays() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
return getMonthDays(year, month);
}
/**
* 获取指定月天数,yyyyMM
*/
public static int getMonthDays(String yearMonth) {
int year = Integer.parseInt(yearMonth.substring(0, 4));
int month = Integer.parseInt(yearMonth.substring(4));
return getMonthDays(year, month);
}
/**
* 获取指定月天数
*/
public static int getMonthDays(int year, int month) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
default:// 2月
boolean isLeapYear = ValidateUtils.isLeapYear(year);
return isLeapYear ? 29 : 28;
}
}
/**
* 获取下一个年月,格式为yyyyMM
*/
public static String getNextYearMonth(String currentYearMonth) {
int year = Integer.parseInt(currentYearMonth.substring(0, 4));
int month = Integer.parseInt(currentYearMonth.substring(4));
if (month == 12) {
year += 1;
month = 1;
} else {
month += 1;
}
StringBuffer strb = new StringBuffer().append(year);
if (month > 9)
strb.append(month);
else
strb.append("0").append(month);
return strb.toString();
}
/**
* 获取当前日期
*
* @return 当前日期
*/
public static int getCurrentDay() {
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_MONTH);
return day;
}
/**
* 获取当前时
*
* @return 当前时间,如:23点,0点,1点等
*/
public static int getCurrentHour() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
return hour;
}
/**
* 获取当前分
*
* @return 当前分
*/
public static int getCurrentMinute() {
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.MINUTE);
return hour;
}
/**
* 获取当前时间的星期数:星期日=7;星期一=1;星期二=2;星期三=3;星期四=4;星期五=5;星期六=6;
*
* @return 周数值
*/
public static int getCurrentWeek() {
Calendar calendar = Calendar.getInstance();
int week = calendar.get(Calendar.DAY_OF_WEEK);
week = week - 1;
if (week == 0)
week = 7;
return week;
}
/**
* 获取两个日期对象相差年数
*
* @param date2 日期对象
* @return int 年份差值
* @parma date1 日期对象
*/
public static int compareYear(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int year1 = calendar.get(Calendar.YEAR);
calendar.setTime(date2);
int year2 = calendar.get(Calendar.YEAR);
return year1 - year2;
}
/**
* 获取两个日期对象相差月数
*
* @param date1 日期对象
* @param date2 日期对象
* @return int 月份差值
*/
public static int compareMonth(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
int year = compareYear(date1, date2);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date1);
int month1 = calendar.get(Calendar.MONTH);
calendar.setTime(date2);
int month2 = calendar.get(Calendar.MONTH);
/* 进行比较 */
return 12 * year + (month1 - month2);
}
/**
* 获取两个日期对象相差月数,大一整月才算大一个月
*
* @param date1 字符串对象
* @param date2 字符串对象
* @return int 月份差值
*/
public static int compareMonth(String date1, String date2) {
if (date1 == null || date2 == null)
return 0;
int year1 = Integer.parseInt(date1.substring(0, 4));
int year2 = Integer.parseInt(date2.substring(0, 4));
int month1 = Integer.parseInt(date1.substring(5, 7));
int month2 = Integer.parseInt(date2.substring(5, 7));
int day1 = Integer.parseInt(date1.substring(8, 10));
int day2 = Integer.parseInt(date2.substring(8, 10));
int value = (year1 - year2) * 12 + (month1 - month2);
if (day1 < day2)
value--;
return value;
}
/**
* 获取两个日期对象相差天数
*
* @param date1str String yyyy-MM-dd
* @param date2str String yyyy-MM-dd
* @return int 日差值
*/
public static int compareDay(String date1str, String date2str) {
if (date1str == null || date2str == null)
return 0;
Date date1 = toDate(date1str, "00:00:01");
Date date2 = toDate(date2str, "00:00:00");
return compareDay(date1, date2);
}
/**
* 获取两个日期对象相差天数
*
* @param date1 日期对象
* @param date2 日期对象
* @return int 日差值
*/
public static int compareDay(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
long time1 = date1.getTime();
long time2 = date2.getTime();
long margin = time1 - time2;
/* 转化成天数 */
int ret = (int) Math.floor((double) margin / (1000 * 60 * 60 * 24));
return ret;
}
/**
* 获取两个日期对象相差天数
*
* @param date1 日期对象
* @param date2 日期对象
* @return int 日差值
*/
public static int compareDayByDate(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
Calendar aCalendar = Calendar.getInstance();
aCalendar.setTime(date1);
int day1 = aCalendar.get(Calendar.DAY_OF_YEAR);
aCalendar.setTime(date2);
int day2 = aCalendar.get(Calendar.DAY_OF_YEAR);
int ret = day1 - day2;
return ret;
}
/**
* 获取两个日期对象相差的小时数
*
* @param date1str String yyyy-MM-dd hh:mm:ss
* @param date2str String yyyy-MM-dd hh:mm:ss
* @return int 相差小时数
*/
public static int compareHour(String date1str, String date2str) {
if (date1str == null || date2str == null)
return 0;
Date date1 = toDate(date1str);
Date date2 = toDate(date2str);
return compareHour(date1, date2);
}
/**
* 获取两个日期对象相差的小时数
*
* @param date1 日期对象
* @param date2 日期对象
* @return int 相差小时数
*/
public static int compareHour(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
long time1 = date1.getTime();
long time2 = date2.getTime();
long margin = time1 - time2;
int ret = (int) Math.floor((double) margin / (1000 * 60 * 60));
return ret;
}
/**
* 获取两个日期对象相差的分钟数
*
* @param date1str String yyyy-MM-dd hh:mm:ss
* @param date2str String yyyy-MM-dd hh:mm:ss
* @return int 相差分钟数
*/
public static int compareMinute(String date1str, String date2str) {
if (date1str == null || date2str == null)
return 0;
Date date1 = toDate(date1str);
Date date2 = toDate(date2str);
return compareMinute(date1, date2);
}
/**
* 获取两个日期对象相差的分钟数
*
* @param date1 日期对象
* @param date2 日期对象
* @return int 相差分钟数
*/
public static int compareMinute(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
long time1 = date1.getTime() / 1000;
long time2 = date2.getTime() / 1000;
long margin = time1 - time2;
int ret = (int) Math.floor((double) margin / 60);
return ret;
}
/**
* 获取两个日期对象相差秒数
*
* @param date1str String yyyy-MM-dd hh:mm:ss
* @param date2str String yyyy-MM-dd hh:mm:ss
* @return int 相差秒数
*/
public static int compareSecond(String date1str, String date2str) {
if (date1str == null || date2str == null)
return 0;
Date date1 = toDate(date1str);
Date date2 = toDate(date2str);
return compareSecond(date1, date2);
}
/**
* 获取两个日期对象相差秒数
*
* @param date1 日期对象
* @param date2 日期对象
* @return int 相差秒数
*/
public static int compareSecond(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;
long time1 = date1.getTime();
long time2 = date2.getTime();
long margin = time1 - time2;
Long longValue = new Long(margin / (1000));
return longValue.intValue();
}
/**
* 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
*
* @param nowTime 当前时间
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
if (nowTime.getTime() == startTime.getTime() || nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if (date.after(begin) && date.before(end)) {
return true;
} else {
return false;
}
}
/**
* 获取和当前时间毫秒差值
*
* @param dateTime YYYY-MM-DD hh:mm:ss
* @return 毫秒差
*/
public static long getTimeMargin(String dateTime) {
int index = dateTime.indexOf(" ");
String date = dateTime.substring(0, index);
String time = dateTime.substring(index + 1);
int dateSlash1 = date.indexOf("-");
int dateSlash2 = date.lastIndexOf("-");
if (dateSlash1 <= 0 || dateSlash1 == dateSlash2)
return -1;
int timeColon1 = time.indexOf(":");
int timeColon2 = time.lastIndexOf(":");
if (timeColon1 <= 0 || timeColon1 == timeColon2)
return -1;
Calendar calendar = Calendar.getInstance();
try {
int year = Integer.parseInt(date.substring(0, dateSlash1));
int month = Integer.parseInt(date.substring(dateSlash1 + 1, dateSlash2));
int day = Integer.parseInt(date.substring(dateSlash2 + 1));
int hour = Integer.parseInt(time.substring(0, timeColon1));
int minute = Integer.parseInt(time.substring(timeColon1 + 1, timeColon2));
int second = Integer.parseInt(time.substring(timeColon2 + 1));
calendar.set(year, month - 1, day, hour, minute, second);
} catch (Exception e) {
return -1;
}
return System.currentTimeMillis() - calendar.getTimeInMillis();
}
public static String getFirstMonthDay() {
String curYearMonth = getDateTimeString("yyyy-MM");
return curYearMonth + "-01";
}
/**
* 获取上一个月第一天 yyyy-MM-dd
*/
public static String getPreviosMonthFirstDay() {
String curYearMonth = getDateTime6String();
String yearMonth = getPreviousYearMonth(curYearMonth);
return yearMonth.substring(0, 4) + "-" + yearMonth.substring(4) + "-01";
}
/**
* 获到上一月最后一天yyyy-MM-dd
*/
public static String getPreviosMonthLastDay() {
String curYearMonth = getDateTime6String();
String yearMonth = getPreviousYearMonth(curYearMonth);
return getLastMonthDay(yearMonth);
}
/**
* 获到当前月最后一天yyyy-MM-dd
*/
public static String getLastMonthDay() {
String curYearMonth = getDateTime6String();
return getLastMonthDay(curYearMonth);
}
/**
* 获到指定月最后一天yyyy-MM-dd
*/
public static String getLastMonthDay(String curYearMonth) {
String yearStr = curYearMonth.substring(0, 4);
String monthStr = curYearMonth.substring(4);
int year = Integer.parseInt(yearStr);
int month = Integer.parseInt(monthStr);
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return yearStr + "-" + monthStr + "-31";
case 4:
case 6:
case 9:
case 11:
return yearStr + "-" + monthStr + "-30";
case 2:
int day = ValidateUtils.isLeapYear(year) ? 29 : 28;
return yearStr + "-" + monthStr + "-" + day;
}
return null;
}
/**
* 获取上一个年月,格式为yyyyMM
*/
public static String getPreviousYearMonth(String currentYearMonth) {
int year = Integer.parseInt(currentYearMonth.substring(0, 4));
int month = Integer.parseInt(currentYearMonth.substring(4));
if (month == 1) {
year -= 1;
month = 12;
} else {
month -= 1;
}
StringBuffer strb = new StringBuffer().append(year);
if (month > 9)
strb.append(month);
else
strb.append("0").append(month);
return strb.toString();
}
/**
* 获取当前时间的前一天或数天的年、月、日,并以数组形式还回。 数组0为年;1为月;2为日
*
* @param year 当前年
* @param month 当前月
* @param day 当前日期
* @param days 相差天数
* @return 年、月、日数组
*/
public static int[] getPreviousDay(int year, int month, int day, int days) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
long longDate = (calendar.getTime()).getTime()
- (1000 * 60 * 60 * 24 * days);
Date date = new Date(longDate);
calendar.setTime(date);
int[] rtn = new int[3];
rtn[0] = calendar.get(Calendar.YEAR);
rtn[1] = calendar.get(Calendar.MONTH) + 1;
rtn[2] = calendar.get(Calendar.DATE);
return rtn;
}
/**
* 获取前几月对应的当前时间
*
* @param months 相差月数
* @return String yyyy-MM-dd
*/
public static String getPreviousDateStringByMonth(int months) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -months);
return toDateString(calendar);
}
/**
* 获取指定时间前几月的时间
*
* @param datetime 指定时间
* @param months 相差月数
* @return String yyyy-MM-dd
*/
public static String getPreviousDateStringByMonth(String datetime, int months) {
Calendar calendar = toCalendar(datetime);
calendar.add(Calendar.MONTH, -months);
return toDateString(calendar);
}
/**
* 获取前几月对应的当前时间
*
* @param months 相差月数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeStringByMonth(int months) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -months);
return toDateTimeString(calendar);
}
/**
* 获取指定时间前几月的时间
*
* @param datetime 指定时间
* @param months 相差月数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeStringByMonth(String datetime,
int months) {
Calendar calendar = toCalendar(datetime);
calendar.add(Calendar.MONTH, -months);
return toDateTimeString(calendar);
}
/**
* 获取前几天对应的当前时间
*
* @param days 相差天数
* @return String yyyy-MM-dd
*/
public static String getPreviousDateString(int days) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -days);
return toDateString(calendar);
}
/**
* 获取指定时间前几天的时间
*
* @param datetime 指定时间
* @param days 相差天数
* @return String yyyy-MM-dd
*/
public static String getPreviousDateString(String datetime, int days) {
Calendar calendar = toCalendar(datetime);
calendar.add(Calendar.DAY_OF_MONTH, -days);
return toDateString(calendar);
}
/**
* 获取前几天对应的当前时间
*
* @param days 相差天数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeString(int days) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -days);
return toDateTimeString(calendar);
}
/**
* 获取指定时间前几天的时间
*
* @param datetime 指定时间
* @param days 相差天数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeString(String datetime, int days) {
Calendar calendar = toCalendar(datetime);
calendar.add(Calendar.DAY_OF_MONTH, -days);
return toDateTimeString(calendar);
}
/**
* 获取前几小时对应的当前时间
*
* @param hours 相差小时数
* @return String yyyy-MM-dd
*/
public static String getPreviousDateByHourString(int hours) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -hours);
return toDateString(calendar);
}
/**
* 获取前几小时对应的当前时间
*
* @param hours 相差小时数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeByHourString(int hours) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -hours);
return toDateTimeString(calendar);
}
/**
* 获取指定时间前几小时的时间
*
* @param datetime 指定时间
* @param hours 相差小时数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeByHourString(String datetime,
int hours) {
Calendar calendar = toCalendar(datetime);
calendar.add(Calendar.HOUR_OF_DAY, -hours);
return toDateTimeString(calendar);
}
/**
* 获取前几秒对应的当前时间
*
* @param second 秒数
* @return String yyyy-MM-dd
*/
public static String getPreviousDateBySecondString(int second) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, -second);
return toDateString(calendar);
}
/**
* 获取前几秒对应的当前时间
*
* @param second 秒数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeBySecondString(int second) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, -second);
return toDateTimeString(calendar);
}
/**
* 获取指定时间前几秒的时间
*
* @param datetime 指定时间
* @param second 秒数
* @return String yyyy-MM-dd HH:mm:ss
*/
public static String getPreviousDateTimeBySecondString(String datetime,
int second) {
Calendar calendar = toCalendar(datetime);
calendar.add(Calendar.SECOND, -second);
return toDateTimeString(calendar);
}
/**
* 获取前一天对应的当前时间,采用标准格式yyyy-MM-dd
*
* @return String
*/
public static String getPreviousDateString() {
return getPreviousDateTimeString("yyyy-MM-dd");
}
/**
* 获取前一天对应的当前时间,采用短信格式yyyy/MM/dd
*
* @return String
*/
public static String getPreviousDateString2() {
return getPreviousDateTimeString("yyyy/MM/dd");
}
/**
* 获取前一天对应的当前时间
*
* @param format 格式化如 yyyy-MM-dd HH:mm:ss
* @return String
*/
public static String getPreviousDateTimeString(String format) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
return toDateTimeString(calendar, format);
}
/**
* 获取前一天对应的当前时间,采用标准格式yyyy-MM-dd HH:mm:ss
*
* @return String
*/
public static String getPreviousDateTimeString() {
return getPreviousDateTimeString("yyyy-MM-dd HH:mm:ss");
}
/**
* 获取前一天对应的当前时间,采用短信格式yyyy/MM/dd HH:mm:ss
*
* @return String
*/
public static String getPreviousDateTimeString2() {
return getPreviousDateTimeString("yyyy/MM/dd HH:mm:ss");
}
/**
* 获到下一个月份yyyy-MM, curYearMonth格式yyyyMM或yyyy-MM
*/
public static String getNextMonthSpe(String curYearMonth) {
curYearMonth = curYearMonth.replace("-", "");
String yearMonth = getNextMonth(curYearMonth);
return yearMonth.substring(0, 4) + "-" + yearMonth.substring(4);
}
/**
* 获到下一个月份yyyyMM, curYearMonth格式yyyyMM
*/
public static String getNextMonth(String curYearMonth) {
int year = Integer.parseInt(curYearMonth.substring(0, 4));
int month = Integer.parseInt(curYearMonth.substring(4));
if (month == 12) {
year += 1;
month = 1;
} else {
month += 1;
}
StringBuffer strb = new StringBuffer().append(year);
if (month > 9)
strb.append(month);
else
strb.append("0").append(month);
return strb.toString();
}
/**
* 获取后一天的Date String
*
* @param spe 分隔符
* @return YYYY+spe+MM+spe+DD
*/
public static String getNextDateStr(String spe) {
Calendar calendar = Calendar.getInstance();
long longDate = (calendar.getTime()).getTime()
+ (1000 * 60 * 60 * 24 * 1);
Date date = new Date(longDate);
calendar.setTime(date);
return toDateString(calendar.getTime(), spe);
}
/**
* 获取指定时间的后一天的Date String
*
* @param currentDate
* @return YYYY+spe+MM+spe+DD
*/
public static String getNextDateString(String currentDate) {
Calendar calendar = toCalendar(currentDate + " 00:00:01");
calendar.add(Calendar.DAY_OF_MONTH, 1);
return toDateString(calendar);
}
/**
* 获取后几年对应的当前时间
*
* @return String
*/
public static String getNextDateStringAddYeah(int years) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, years);
return toDateString(calendar);
}
/**
* 获取后几月对应的当前时间
*
* @return String
*/
public static String getNextDateStringAddMonth(int months) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, months);
return toDateString(calendar);
}
/**
* 获取指定日期的后几月日期
*
* @param currentDate 指定日期
* @param months 指定月数
* @return yyyy-MM-dd
* @throws Exception
*/
public static String getNextDateStringAddMonth(String currentDate,
int months) {
int year = Integer.parseInt(currentDate.substring(0, 4));
int month = Integer.parseInt(currentDate.substring(5, 7));
int day = Integer.parseInt(currentDate.substring(8));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
calendar.add(Calendar.MONTH, months);
return toDateString(calendar);
}
/**
* 获取后几天对应的当前时间
*
* @return String
*/
public static String getNextDateStringAddDay(int days) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, days);
return toDateString(calendar);
}
/**
* 获取指定日期的后几天日期
*
* @param currentDate 指定日期
* @param days 指定天数
* @return yyyy-MM-dd
* @throws Exception
*/
public static String getNextDateStringAddDay(String currentDate, int days) {
int year = Integer.parseInt(currentDate.substring(0, 4));
int month = Integer.parseInt(currentDate.substring(5, 7));
int day = Integer.parseInt(currentDate.substring(8));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
calendar.add(Calendar.DAY_OF_YEAR, days);
return toDateString(calendar);
}
/**
* 获取后几天对应的当前时间
*
* @return String
*/
public static String getNextDateTimeString(int days) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, days);
return toDateTimeString(calendar);
}
/**
* 获取后几小时对应的当前时间
*
* @return String
*/
public static String getNextDateStringByHour(int hours) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, hours);
return toDateString(calendar);
}
/**
* 获取后几小时对应的当前时间
*
* @return String
*/
public static String getNextDateTimeStringByHour(int hours) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, hours);
return toDateTimeString(calendar);
}
/**
* 获取后几秒对应的当前时间
*
* @return String
*/
public static String getNextDateStringBySecond(int seconds) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, seconds);
return toDateString(calendar);
}
/**
* 获取后几秒对应的当前时间
*
* @return String
*/
public static String getNextDateTimeStringBySecond(int seconds) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.SECOND, seconds);
return toDateTimeString(calendar);
}
/**
* 获取后一天的Date String
*
* @param format 格式化
* @return YYYY+spe+MM+spe+DD
*/
public static String getNextDateTimeStr(String format) {
Calendar calendar = Calendar.getInstance();
long longDate = (calendar.getTime()).getTime() + (1000 * 60 * 60 * 24 * 1);
Date date = new Date(longDate);
calendar.setTime(date);
return toDateTimeString(calendar.getTime(), format);
}
/**
* 获取后一天String
*
* @return 年、月、日数组
*/
public static int[] getNextDay() {
Calendar calendar = Calendar.getInstance();
long longDate = (calendar.getTime()).getTime() + (1000 * 60 * 60 * 24 * 1);
Date date = new Date(longDate);
calendar.setTime(date);
int[] rtn = new int[3];
rtn[0] = calendar.get(Calendar.YEAR);
rtn[1] = calendar.get(Calendar.MONTH) + 1;
rtn[2] = calendar.get(Calendar.DATE);
return rtn;
}
/**
* 获取当前时间的后一天或数天的年、月、日,并以数组形式还回。 数组0为年;1为月;2为日
*
* @param year 当前年
* @param month 当前月
* @param day 当前日期
* @param days 相差天数
* @return 年、月、日数组
*/
public static int[] getNextDay(int year, int month, int day, int days) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
long longDate = (calendar.getTime()).getTime() + (1000 * 60 * 60 * 24 * days);
Date date = new Date(longDate);
calendar.setTime(date);
int[] rtn = new int[3];
rtn[0] = calendar.get(Calendar.YEAR);
rtn[1] = calendar.get(Calendar.MONTH) + 1;
rtn[2] = calendar.get(Calendar.DATE);
return rtn;
}
/**
* 获取指定时间所在周的第一天的时间
*
* @param year 年
* @param month 月
* @param day 日
* @return 年、月、日数组
*/
public static int[] getDayOfWeek(int year, int month, int day) {
int[] rtn = new int[6];
int week = 0;
long longDate = 0;
Date date = null;
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
week = calendar.get(Calendar.DAY_OF_WEEK);
longDate = (calendar.getTime()).getTime() - (60 * 1000 * 60 * 24 * (week - 1));
date = new Date(longDate);
calendar1.setTime(date);
rtn[0] = calendar1.get(Calendar.YEAR);
rtn[1] = calendar1.get(Calendar.MONTH) + 1;
rtn[2] = calendar1.get(Calendar.DATE);
longDate = (calendar.getTime()).getTime() + (60 * 1000 * 60 * 24 * (7 - week));
date = new Date(longDate);
calendar2.setTime(date);
rtn[3] = calendar2.get(Calendar.YEAR);
rtn[4] = calendar2.get(Calendar.MONTH) + 1;
rtn[5] = calendar2.get(Calendar.DATE);
return rtn;
}
/*********************************************************/
// 以下为数据库使用的日期方法,Timestamp ,java.sql.Date
/*********************************************************/
/**
* 返回当前时间的Timestamp
*/
public static Timestamp nowTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
/**
* 返回从当日开始的Timestamp
*/
public static Timestamp getDayStart(Timestamp stamp) {
return getDayStart(stamp, 0);
}
/**
* 返回多少天后开始的Timestamp
*/
public static Timestamp getDayStart(Timestamp stamp, int daysLater) {
Calendar tempCal = Calendar.getInstance();
tempCal.setTime(new Date(stamp.getTime()));
tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH),
tempCal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
tempCal.add(Calendar.DAY_OF_MONTH, daysLater);
return new Timestamp(tempCal.getTime().getTime());
}
/**
* 返回下一天开始的Timestamp
*/
public static Timestamp getNextDayStart(Timestamp stamp) {
return getDayStart(stamp, 1);
}
/**
* 返回从当日结束的Timestamp
*/
public static Timestamp getDayEnd(Timestamp stamp) {
return getDayEnd(stamp, 0);
}
/**
* 返回从多少日后结束的Timestamp
*/
public static Timestamp getDayEnd(Timestamp stamp, int daysLater) {
Calendar tempCal = Calendar.getInstance();
tempCal.setTime(new Date(stamp.getTime()));
tempCal.set(tempCal.get(Calendar.YEAR), tempCal.get(Calendar.MONTH),
tempCal.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
tempCal.add(Calendar.DAY_OF_MONTH, daysLater);
return new Timestamp(tempCal.getTime().getTime());
}
/**
* String到java.sql.Date的转换 标准格式:YYYY-MM-DD
*
* @param date The date String
* @return java.sql.Date
*/
public static java.sql.Date toSqlDate(String date) {
Date newDate = toDate(date, "00:00:00");
if (newDate == null)
return null;
return new java.sql.Date(newDate.getTime());
}
/**
* 生成java.sql.Date,通过传入year, month, day
*
* @param yearStr 年
* @param monthStr 月
* @param dayStr 日
* @return A java.sql.Date
*/
public static java.sql.Date toSqlDate(String yearStr, String monthStr,
String dayStr) {
Date newDate = toDate(yearStr, monthStr, dayStr, "0", "0",
"0");
if (newDate == null)
return null;
return new java.sql.Date(newDate.getTime());
}
/**
* 生成java.sql.Date,通过传入year, month, day
*
* @param year 年
* @param month 月
* @param day 日
* @return A java.sql.Date
*/
public static java.sql.Date toSqlDate(int year, int month, int day) {
Date newDate = toDate(year, month, day, 0, 0, 0);
if (newDate == null)
return null;
return new java.sql.Date(newDate.getTime());
}
/**
* 转换String 到 java.sql.Time,格式:"HH:MM:SS"
*
* @param time The time String
* @return A java.sql.Time
*/
public static java.sql.Time toSqlTime(String time) {
Date newDate = toDate("1970-1-1", time);
if (newDate == null)
return null;
return new java.sql.Time(newDate.getTime());
}
/**
* 生成 java.sql.Time 通过输入时,分,秒
*
* @param hourStr 时
* @param minuteStr 分
* @param secondStr 秒
* @return A java.sql.Time
*/
public static java.sql.Time toSqlTime(String hourStr, String minuteStr,
String secondStr) {
Date newDate = toDate("0", "0", "0", hourStr, minuteStr,
secondStr);
if (newDate == null)
return null;
return new java.sql.Time(newDate.getTime());
}
/**
* 生成 java.sql.Time 通过输入时,分,秒
*
* @param hour int 时
* @param minute int 分
* @param second 秒
* @return A java.sql.Time
*/
public static java.sql.Time toSqlTime(int hour, int minute, int second) {
Date newDate = toDate(0, 0, 0, hour, minute, second);
if (newDate == null)
return null;
return new java.sql.Time(newDate.getTime());
}
/**
* 转换String 到 java.sql.Timestamp,格式:"YYYY-MM-DD HH:MM:SS"
*
* @param dateTime 格式:"YYYY-MM-DD HH:MM:SS"
* @return Timestamp
*/
public static Timestamp toTimestamp(String dateTime) {
Date newDate = toDate(dateTime);
if (newDate == null)
return null;
return new Timestamp(newDate.getTime());
}
/**
* 转换String 到 java.sql.Timestamp,格式:"YYYY-MM-DD HH:MM:SS"
*
* @param date The date String: YYYY-MM-DD
* @param time The time String: HH:MM:SS
* @return Timestamp
*/
public static Timestamp toTimestamp(String date, String time) {
Date newDate = toDate(date, time);
if (newDate == null)
return null;
return new Timestamp(newDate.getTime());
}
/**
* 生成 Timestamp 通过输入年,月,日,时,分,秒
*
* @param yearStr 年
* @param monthStr 月
* @param dayStr 日
* @param hourStr 时
* @param minuteStr 分
* @param secondStr T秒
* @return Timestamp
*/
public static Timestamp toTimestamp(String yearStr, String monthStr,
String dayStr, String hourStr, String minuteStr, String secondStr) {
Date newDate = toDate(yearStr, monthStr, dayStr, hourStr,
minuteStr, secondStr);
if (newDate == null)
return null;
return new Timestamp(newDate.getTime());
}
/**
* 生成 Timestamp 通过输入年,月,日,时,分,秒
*
* @param year 年 int
* @param month 月 int
* @param day 日 int
* @param hour 时 int
* @param minute 分 int
* @param second 秒 int
* @return Timestamp
*/
public static Timestamp toTimestamp(int year, int month, int day, int hour,
int minute, int second) {
Date newDate = toDate(year, month, day, hour, minute, second);
if (newDate == null)
return null;
return new Timestamp(newDate.getTime());
}
public static List process(String startDate, String endDate) {
List al = new ArrayList();
if (startDate.equals(endDate)) {
// IF起始日期等于截止日期,仅返回起始日期一天
al.add(startDate);
} else if (startDate.compareTo(endDate) < 0) {
// IF起始日期早于截止日期,返回起止日期的每一天
while (startDate.compareTo(endDate) < 0) {
al.add(startDate);
try {
Long l = FORMAT_YYYY_MM_DD.parse(startDate).getTime();
startDate = FORMAT_YYYY_MM_DD
.format(l + 3600 * 24 * 1000);// +1天
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
// IF起始日期晚于截止日期,仅返回起始日期一天
al.add(startDate);
}
return al;
}
}
3、JSON格式化工具类
3.1、JsonUtils
package com.study.java8.util;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description: json格式化工具类
* @Author: jsz
* @date: 2023/9/9 11:11
*/
public class JsonUtils {
/** logger */
private static final Logger logger = LoggerFactory.getLogger(JsonUtils.class);
private static final ObjectMapper objectMapper;
static {
objectMapper = new ObjectMapper();
// 如果为空则不输出
//objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
// 对于空的对象转json的时候不抛出错误
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
// 禁用序列化日期为timestamps
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 禁用遇到未知属性抛出异常
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
// 视空字符传为null
objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
// 低层级配置
objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
// 允许属性名称没有引号
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
// 允许单引号
objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
// 取消对非ASCII字符的转码
objectMapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false);
}
/**
* 字符串转jsonNode
* @param json
* @return
*/
public static JsonNode strToJsonNode(String json) {
try {
return objectMapper.readTree(json);
} catch (IOException e) {
logger.error("strToJsonNode Json格式化异常", e);
}
return null;
}
/**
* 转成Json字符串
* @return
*/
public static String toJsonString(Object object) {
if (object != null) {
try {
return objectMapper.writeValueAsString(object);
} catch (IOException e) {
logger.error("toJsonString Json格式化异常", e);
}
}
return null;
}
public static T readJson2Bean(String jsonString, Class valueType) {
if (org.apache.commons.lang3.StringUtils.isNotBlank(jsonString)) {
try {
return objectMapper.readValue(jsonString, valueType);
} catch (IOException e) {
logger.error("readJson2Bean Json格式化异常", e);
}
}
return null;
}
public static T readJson2Bean(String jsonString, TypeReference ref) {
if (org.apache.commons.lang3.StringUtils.isNotBlank(jsonString)) {
try {
return objectMapper.readValue(jsonString, ref);
} catch (IOException e) {
logger.error("readJson2Bean Json格式化异常", e);
}
}
return null;
}
public static List readJson2List(String jsonString, Class elementClass) {
if (jsonString == null || "".equals(jsonString)) {
return null;
} else {
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(ArrayList.class, elementClass);
try {
return (List) objectMapper.readValue(jsonString, javaType);
} catch (IOException e) {
logger.error("decodeJsonToList Json格式化异常", e);
return null;
}
}
}
/**
* 对象转换
*
* @param fromValue 输入对象
* @param toValueType 输出对象
*/
public static T convertValue(Object fromValue, Class toValueType) {
return objectMapper.convertValue(fromValue, toValueType);
}
/**
* 对象转换
*
* @param fromValue 输入对象
* @param toValueTypeRef 输出对象
*/
public static T convertValue(Object fromValue, TypeReference toValueTypeRef) {
return objectMapper.convertValue(fromValue, toValueTypeRef);
}
/**
* 数据转换成map
* @return
*/
public static Map getMapByStr(String dataObject) {
if (StrUtils.isNotBlank(dataObject)) {
try {
return objectMapper.readValue(dataObject, new TypeReference
4、http请求工具类
4.1、HttpUtils
package com.study.java8.util;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.net.ssl.*;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: HTTP请求工具类
* @Author: jsz
* @date: 2023/9/9 11:13
*/
@Component
public class HttpUtils {
/** logger */
private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);
private static RequestConfig requestConfig;
private static final int MIN_TIMEOUT = 20000;
private static final int MAX_TIMEOUT = 30000;
static {
RequestConfig.Builder configBuilder = RequestConfig.custom();
// 设置连接超时
configBuilder.setConnectTimeout(MIN_TIMEOUT);
// 设置读取超时
configBuilder.setSocketTimeout(MAX_TIMEOUT);
// 设置从连接池获取连接实例的超时
configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
requestConfig = configBuilder.build();
}
/**
* 获取请求消息体
* @param request
* @return
*/
public static String getHttpBody(HttpServletRequest request){
String str = null;
try {
// 获取输入流
BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
// 写入数据到Stringbuilder
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = streamReader.readLine()) != null) {
sb.append(line);
}
str = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 发送 GET 请求(HTTP),不带输入数据
* @param url
* @param headers
* @return
*/
public static String doGet(String url, Map headers) {
return doGet(url, new HashMap(), headers, false);
}
/**
* 发送 GET 请求(HTTP),K-V形式
* @param url
* @param params
* @param headers
* @return
*/
public static String doGet(String url, Map params, Map headers) {
return doGet(url, params, headers, false);
}
/**
* 发送 GET 请求(HTTP),不带输入数据
* @param url
* @param headers
* @param isLongTerm 是否长期日志
* @return
*/
public static String doGet(String url, Map headers, boolean isLongTerm) {
return doGet(url, new HashMap(), headers, isLongTerm);
}
/**
* 发送 GET 请求(HTTP),K-V形式
* @param url
* @param params
* @param headers
* @return
*/
public static String doGet(String url, Map params, Map headers, boolean isLongTerm) {
String apiUrl = url;
StringBuffer param = new StringBuffer();
int i = 0;
for (String key : params.keySet()) {
if (i == 0) {
param.append("?");
} else {
param.append("&");
}
param.append(key).append("=").append(params.get(key));
i++;
}
apiUrl += param;
String result = null;
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpGet = new HttpGet(apiUrl);
if (headers != null) {
for (String key : headers.keySet()) {
httpGet.addHeader(key, headers.get(key));
}
}
httpGet.setConfig(requestConfig);
HttpResponse response = httpclient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream instream = entity.getContent();
result = IOUtils.toString(instream, "UTF-8");
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 发送 POST 请求(HTTP),K-V形式
* @param apiUrl API接口URL
* @param params 参数jsonMap
* @return
*/
public static String doPost(String apiUrl, Map params, Map headers) {
return doPost(apiUrl, JsonUtils.toJsonString(params) ,headers, false);
}
/**
* 发送 POST 请求(HTTP),K-V形式
* @param apiUrl API接口URL
* @param params 参数jsonMap
* @param isLongTerm 是否长期日志
* @return
*/
public static String doPost(String apiUrl, Map params, Map headers, boolean isLongTerm) {
return doPost(apiUrl, JsonUtils.toJsonString(params) ,headers, isLongTerm);
}
/**
* 发送 POST 请求(HTTP),JSON形式
* @param apiUrl
* @param json json对象
* @param headers
* @return
*/
public static String doPost(String apiUrl, String json, Map headers, boolean isLongTerm) {
CloseableHttpClient httpClient = HttpClients.createDefault();
String httpStr = null;
HttpPost httpPost = new HttpPost(apiUrl);
CloseableHttpResponse response = null;
try {
if (headers != null) {
for (String key : headers.keySet()) {
httpPost.addHeader(key, headers.get(key));
}
}
httpPost.setConfig(requestConfig);
StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");// 解决中文乱码问题
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
if (entity != null) {
httpStr = EntityUtils.toString(entity, "UTF-8");
}
} catch (Exception e) {
logger.error("requestUrl: {}, requestBody: {}, requestHeader: {},requestError: {}", apiUrl, json, headers.toString(),e.getMessage());
e.printStackTrace();
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
}
}
return httpStr;
}
/**
* 远程读取文件流
* @param netUrl
* @return
*/
public static InputStream getFileInputStream(String netUrl) {
return getFileInputStream(netUrl, null);
}
/**
* 远程读取文件流
* @param netUrl
* @param headers
* @return
*/
public static InputStream getFileInputStream(String netUrl, Map headers) {
InputStream inStream = null;
//判断http和https
if (netUrl.startsWith("https://")) {
inStream = getHttpsInputStream(netUrl, headers);
} else {
inStream = getHttpInputStream(netUrl, headers);
}
return inStream;
}
/**
* 远程读取文件流(HTTP)
* @param netUrl
* @param headers
* @return
*/
public static InputStream getHttpInputStream(String netUrl, Map headers) {
InputStream inStream = null;
int statusCode = 408;
try {
URL url = new URL(netUrl);
HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);
if (headers != null) {
for (String key : headers.keySet()) {
urlCon.setRequestProperty(key, headers.get(key));
}
}
statusCode = urlCon.getResponseCode();
if (statusCode != HttpURLConnection.HTTP_OK) {
logger.error("远程文件获取错误:{}", netUrl);
throw new Exception("文件读取失败");
}
inStream = urlCon.getInputStream();
} catch (Exception e) {
logger.error("远程文件获取错误:{}", netUrl);
e.printStackTrace();
}
return inStream;
}
/**
* 远程读取文件流(HTTPS)
* @param netUrl
* @param headers
* @return
*/
public static InputStream getHttpsInputStream(String netUrl, Map headers) {
InputStream inStream = null;
int statusCode = 408;
try {
SSLContext sslcontext = SSLContext.getInstance("SSL", "SunJSSE");
URL url = new URL(netUrl);
HostnameVerifier ignoreHostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslsession) {
logger.warn("WARNING: Hostname is not matched for cert.");
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostnameVerifier);
HttpsURLConnection.setDefaultSSLSocketFactory(sslcontext.getSocketFactory());
HttpsURLConnection urlCon = (HttpsURLConnection) url.openConnection();
urlCon.setConnectTimeout(30000);
urlCon.setReadTimeout(30000);
if (headers != null) {
for (String key : headers.keySet()) {
urlCon.setRequestProperty(key, headers.get(key));
}
}
statusCode = urlCon.getResponseCode();
if (statusCode != HttpURLConnection.HTTP_OK) {
logger.error("远程文件获取错误:{}", netUrl);
throw new Exception("文件读取失败");
}
inStream = urlCon.getInputStream();
} catch (Exception e) {
e.printStackTrace();
logger.error("远程文件获取错误:{}, 错误描述:{}", netUrl, e.getMessage());
}
return inStream;
}
}