SimpleDateFormat格式化
SimpleDateFormat不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。
日期/时间模式
/**
* yyyy:年
* MM:月
* dd:日
* hh:1~12小时制(1-12)
* HH:24小时制(0-23)
* mm:分
* ss:秒
* S:毫秒
* Y:当前周所在年份
* G:年代【AD(公元)、BC(公元前)】
* E:星期几【汉字】
* D:一年中的天数
* F:一月中的第几个星期【月份中的星期(会把这个月总共过的天数除以7)】
* w:一年中的第几个星期
* W:一月中的第几星期【月份中的周数(会根据实际情况来算)】
* a:上下午标识
* k:和HH差不多,表示一天24小时制(1-24)。
* K:和hh差不多,表示一天12小时制(0-11)。
* z:表示时区【通用时区(Pacific Standard Time; PST; GMT-08:00)】
* Z:表示时区【RFC 822时区(-0800,+0800)】
* X:表示时区【ISO 8601时区(-08; -0800; -08:00)】
* u:星期几【数字】
*/
//HH 和 hh 的差别:前者是24小时制,后者是12小时制。
StringBuilder sb = new StringBuilder();
//追加
sb
.append("当前时间24小时制H时S毫秒:yyyy年MM月dd日 HH:mm:ss:SS\n")
.append("当前时间12小时制h时S毫秒:yyyy年MM月dd日 hh:mm:ss:SS\n")
.append("当前时间24小时制k时S毫秒:yyyy年MM月dd日 kk:mm:ss:SS\n")
.append("当前时间12小时制K时S毫秒:yyyy年MM月dd日 KK:mm:ss:SS\n")
.append("今年是Y年\n")
.append("年代:G\n")
.append("上午或者下午:a\n")
.append("星期:E\n")
.append("一年中的第D天\n")
.append("一月中的第F个星期\n")
.append("一年中的第w个星期\n")
.append("一月中的第W个星期\n")
.append("通用时区:z\n")
.append("822时区:Z\n") // RFC 822时区
.append("8601时区:X\n") // ISO 8601时区
.append("星期:u\n"); //数字
//时间格式转换
SimpleDateFormat sdf = new SimpleDateFormat(sb.toString());
String dateString = sdf.format(new Date());
System.out.println(dateString);
运行结果
当前时间24小时制15时939毫秒:2022年10月10日 15:13:18:939
当前时间12小时制3时939毫秒:2022年10月10日 03:13:18:939
当前时间24小时制15时939毫秒:2022年10月10日 15:13:18:939
当前时间12小时制3时939毫秒:2022年10月10日 03:13:18:939
今年是2022年
年代:公元
上午或者下午:下午
星期:星期一
一年中的第283天
一月中的第2个星期
一年中的第42个星期
一月中的第3个星期
通用时区:CST
822时区:+0800
8601时区:+08
星期:1
DateTimeFormatter格式化
DateTimeFormatter不但是不变对象,它还是线程安全的
System.out.println("默认时区:"+ZoneId.systemDefault());
System.out.println("本地默认时区:"+DateUtil.format(new Date(),"yyyy-MM-dd'T'HH:mm:ssXXX"));
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
// XXX:表示时区
// ZonedDateTime.now() 默认时区
// ZoneId.getAvailableZoneIds() //获取所有可使用时区
// ZoneId.of 获取指定时区
System.out.println("本地默认时区:"+dtf.format(ZonedDateTime.now()));
System.out.println("世界标准时间UTC:"+dtf.format(ZonedDateTime.now(ZoneId.of("UTC"))));
System.out.println("世界标准时间GMT:"+dtf.format(ZonedDateTime.now(ZoneId.of("GMT"))));
System.out.println("世界标准时间UT:"+dtf.format(ZonedDateTime.now(ZoneId.of("UT"))));
//运行结果
/**
* 默认时区:Asia/Shanghai
* 本地默认时区:2022-10-10T16:12:27+08:00
* 本地默认时区:2022-10-10T16:12:27+08:00
* 世界标准时间UTC:2022-10-10T08:12:27Z
* 世界标准时间GMT:2022-10-10T08:12:27Z
* 世界标准时间UT:2022-10-10T08:12:27Z
*/