时间戳相关知识研究

最近项目上想使用时间戳,做防止重放攻击的校验(时间差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 block
			e.printStackTrace();
		}

输出

转换为东八区时间:2019-07-10 17:09:32 GMT+08:00
发布了331 篇原创文章 · 获赞 51 · 访问量 44万+

猜你喜欢

转载自blog.csdn.net/y41992910/article/details/95342060