Java日期格式化参数对照表
常用格式: yyyy-MM-dd HH:mm:ss
纪元标记 | AD | 备注 |
---|---|---|
y/u | 年份 | 2001 u 在使用jdk8格式化使用过 |
Y | 周年年份 | 2001 当天所在的周属于的年份, (一年中的最后一周存在跨年的情况) 来自 http://www.cnblogs.com/zheting/p/7702470.html |
M | 月份 | July or 07 |
d | 一个月的第几天 | 10 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 22 |
m | 分钟数 | 30 |
s | 秒数 | 55 |
S | 毫秒数 | 234 |
E | 星期几 | Tuesday |
D | 一年中的第几天 | 360 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
' | 文字定界符 | Delimiter |
" | 单引号 ` |
// 严格判断时间是否合法
DateTimeFormatter ldt = DateTimeFormatter.ofPattern("uuuuMMdd").withResolverStyle(ResolverStyle.STRICT);
try {
LocalDate localDate = LocalDate.parse("20190229", ldt);
System.out.println(localDate);
} catch (Exception e) {
e.printStackTrace();
}
// 获取两个日期间隔的所有月份
public static List<String> getBetweenMonths(String start, String end) {
LocalDate startDate = LocalDate.parse(start);
LocalDate endDate = LocalDate.parse(end);
return Stream.iterate(startDate, localDate -> localDate.plusMonths(1))
// 截断无限流,长度为起始时间和结束时间的差+1个
.limit(ChronoUnit.MONTHS.between(startDate, endDate) + 1)
// 由于最后要的是字符串,所以map转换一下
.map(LocalDate::toString)
// 把流收集为List
.collect(Collectors.toList());
}
/** LocalDateTime 转化成 Date*/
Function<LocalDateTime, Date> dateTime2Date=l->Date.from(l.toInstant(ZoneOffset.of("+8")));
/** Date 转化成 LocalDateTime*/
Function<Date, LocalDateTime> date2DateTime=d->d.toInstant().atOffset(ZoneOffset.of("+8")).toLocalDateTime();