详细参考:
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 @Override protected DateFormat initialValue() { return new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); } }; public static String format(Date date) { return threadLocal.get().format(date); } |
---|