做文字的网站/职业技能培训平台
最近项目上想使用时间戳,做防止重放攻击的校验(时间差N分钟则认为是重放攻击,拒绝处理)
但是发现普通的"yyyy-MM-dd HH:mm:ss"格式的时间,在各个时区中,会出现问题.
时间戳的就是要能在各个时区之间,统一的转好转换.大家处于物理上的同一时刻.
你是东八区的时区,我是东九区的时区.你8点整,正好是我的9点整.
实现方案:
1.timestamp 是指格林威治时间( GMT ) 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。同一时刻,在全世界任何地点获取的值都是一样的。
java用long currentTime = System.currentTimeMillis();来实现
long currentTime = System.currentTimeMillis();System.out.println(currentTime);System.out.println(System.nanoTime());SimpleDateFormat dong8 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");dong8.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));Date date8 = new Date(currentTime);System.out.println(dong8.format(date8));SimpleDateFormat dong9 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");dong9.setTimeZone(TimeZone.getTimeZone("GMT+09:00"));Date date9 = new Date(currentTime);System.out.println(dong9.format(date9));
输出
2019-07-10 15:29:16
2019-07-10 16:29:16
2.使用带时区的字符串
//转换为东八区时间String str = "2019-07-10 19:09:32 GMT+10:00";try {SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");Date date4 = simpleDateFormat4.parse(str);System.out.println("转换为东八区时间:" + simpleDateFormat4.format(date4));} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}
输出
转换为东八区时间:2019-07-10 17:09:32 GMT+08:00