Java 时间
//isBefore
//isAfter
//截取部分代码片段
LocalDateTime.parse(tmp.get("ts").toString(), DATE_TIME_FORMATTER).isAfter(LocalDateTime.now().minusMinutes(config.getIncTime()))
// 获取时间戳
System.currentTimeMillis()
// 时间戳
LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli()
public enum TimeFormat {
// 短时间格式 年月日
/**
* 时间格式:yyyy-MM-dd
*/
SHORT_DATE_PATTERN_LINE("yyyy-MM-dd"),
/**
* 时间格式:yyyy/MM/dd
*/
SHORT_DATE_PATTERN_SLASH("yyyy/MM/dd"),
/**
* 时间格式:yyyy\\MM\\dd
*/
SHORT_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd"),
/**
* 时间格式:yyyyMMdd
*/
SHORT_DATE_PATTERN_NONE("yyyyMMdd"),
// 长时间格式 年月日时分秒
/**
* 时间格式:yyyy-MM-dd HH:mm:ss
*/
LONG_DATE_PATTERN_LINE("yyyy-MM-dd HH:mm:ss"),
/**
* 时间格式:yyyy/MM/dd HH:mm:ss
*/
LONG_DATE_PATTERN_SLASH("yyyy/MM/dd HH:mm:ss"),
/**
* 时间格式:yyyy\\MM\\dd HH:mm:ss
*/
LONG_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss"),
/**
* 时间格式:yyyyMMdd HH:mm:ss
*/
LONG_DATE_PATTERN_NONE("yyyyMMdd HH:mm:ss"),
// 长时间格式 年月日时分秒 带毫秒
LONG_DATE_PATTERN_WITH_MILSEC_LINE("yyyy-MM-dd HH:mm:ss.SSS"),
LONG_DATE_PATTERN_WITH_MILSEC_SLASH("yyyy/MM/dd HH:mm:ss.SSS"),
LONG_DATE_PATTERN_WITH_MILSEC_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss.SSS"),
LONG_DATE_PATTERN_WITH_MILSEC_NONE("yyyyMMdd HH:mm:ss.SSS");
private transient DateTimeFormatter formatter;
TimeFormat(String pattern) {
formatter = DateTimeFormatter.ofPattern(pattern);
}
}
Java SPI
SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。
Java IO
类别 | 字符流 | 字节流 |
---|---|---|
分类 | Reader是所有读取字符串输入流的祖先, 而writer是所有输出字符串的祖先。 |
InputStream是所有字节输入流的祖先, 而OutputStream是所有字节输出流的祖先。 |
大小 | 处理的单元为2个字节的Unicode字符, 分别操作字符、字符数组或字符串 |
处理单元为1个字节,操作字节和字节数组 |
转换 | String转化为byte[] String.getBytes(String charsetName) |
byte[]转化为String |
# InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
概念 | 分析 |
---|---|
Java 是单继承多实现 | 若是多继承,多个父类中出现了重复方法,不知道调用那个; 而多实现类,都会到具体实现类中实现调用的抽象方法。 接口可以多继承 来源 |
动态代理 | JDK基于接口(Proxy.newInstnce 实现 new InvocationHandler)、 CGLIB基于继承 参考 |
同步与异步 | 针对于被调用方,执行时间长短没变; 异步即被调用方重开线程处理。 |
阻塞与非阻塞 | 针对于调用方是否阻塞, 如果未阻塞(提交到线程池中,执行下个操作) |
并行与并发 | 并行利用的是多核CPU, 并发利用的是CPU时间片 |
【2019-05-23】
(1) ? 通配符 (匹配0次或1次)
(2) * 匹配0次或多次
(3) ^... 以... 开头
(4) ...$ 以... 结尾
(5) | 并集(多个条件满足一个即可)
(6) + 匹配前面子表达式中一次或多次
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。
? * + {}
<1. 年校验
String reg = "2020年";
System.out.println(reg.matches("[0-9]{4}年$"));
<2. 月校验
String monthReg = "1月";
System.out.println(monthReg.matches("[1-9]月$|1[012]月$"));