详细参考:
https://blog.csdn.net/solocoder/article/details/83655885

(一)函数语法


G 年代标志符 y 年 M 月 d 日 h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分 s 秒 S 毫秒 E 星期 D 一年中的第几天 F 一月中第几个星期几 w 一年中第几个星期 W 一月中第几个星期 a 上午 / 下午 标记符 k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区

(三)转换案例

SimpleDateFormat myFmt = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒”);
System.out.println(myFmt.format(new Date()));
//2020年01月12日 21时11分08秒
SimpleDateFormat myFmt1 = new SimpleDateFormat(“yy/MM/dd HH:mm”);
System.out.println(myFmt1.format(new Date()));
//20/01/12 21:11

SimpleDateFormat myFmt2 = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);//等价于now.toLocaleString()
System.out.println(myFmt2.format(new Date()));
//2020-01-12 21:11:08
SimpleDateFormat myFmt3 = new SimpleDateFormat(“yyyy年MM月dd日 HH时mm分ss秒 E “);
System.out.println(myFmt3.format(new Date()));
//2020年01月12日 21时11分08秒 星期日 SimpleDateFormat myFmt4 = new SimpleDateFormat(
“一年中的第 D 天 一年中第w个星期 一月中第W个星期 在一天中k时 z时区”);
System.out.println(myFmt4.format(new Date()));
//一年中的第 12 天 一年中第3个星期 一月中第3个星期 在一天中21时 CST时区 System.out.println(new Date().toGMTString());
//12 Jan 2020 13:11:08 GMT
System.out.println(new Date().toLocaleString());
//2020-1-12 21:11:08
System.out.println(new Date().toString());
//Sun Jan 12 21:11:08 CST 2020



(四)从数据库里面获取的timestamp时间如何和当前时间进行比对

SELECT id,
denomination,
use_condition,
update_time,
DATE_FORMAT(expiration_time, ‘%Y-%m-%d %h:%i:%s’) AS expiration_time
,
scope_of_application,
update_time,
whetherUse
FROM giftcertificate
WHERE id = ‘aa462194-8206-11e9-ab77-7cd30aeb1526’;
这个是SQL, 查询出来的时候先精确到秒,然后代码那里接收
//获取mybatis查出来的值(已经驼峰处理了)
String expirationTime = (String) dataMap.get(“expirationTime”);
/日期转毫秒值/
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
/日期字符串转日期/
Date parse = simpleDateFormat.parse(expirationTime);
long time = parse.getTime(); // 给从数据库取出来的值进行了转成了毫秒值了

long time1 = new Date().getTime();//当前时间的毫秒值

if (time < time1) {
throw new ExceptionUtil(“该礼券已经过期”);
}

(五)线程安全问题


这样就解决了线程安全问题了

@Test
public void c高并发体验() {
Date date = new Date();
String format = this._format
(date);
System.out.println(“format = “ + format);

}
//要在高并发环境下能有比较好的体验, // 可以使用ThreadLocal来限制SimpleDateFormat只能在线程内共享, // 这样就避免了多线程导致的线程安全问题。 private static ThreadLocal threadLocal = new ThreadLocal() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
}
};

public static String format(Date date) {
return threadLocal.get().format(date);
}