之前接到需求,需要给APP内的H5活动的接口加上时效性,防止活动后还有用户调用接口;
因为有些H5活动是长期的,有些是短期的,所以我需要做好区分,因为app是国外用户在用的,所以还要考虑的时区的问题;
想了一下决定用注解
+`拦截器
的方式去实现
默认已经创建好了SpringBoot项目
一、获取不同时区的时间方式
1、通过时区获取所在时区时间
/**
* 获得东八区时间
*
* @return
*/
public static String getChinaTime() {
TimeZone timeZone = TimeZone.getTimeZone("GMT+8:00");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(timeZone);
return simpleDateFormat.format(new Date());
}
2、通过地区获取所在时区时间
根据ZoneId
获取当地时间
ZonedDateTime
是结合了LocalDateTime类与 ZoneId 类。它用于表示具有时区(地区/城市,如欧洲/巴黎)的完整日期(年,月,日)和时间(小时,分钟,秒,纳秒)
ZoneId pstZoneId = ZoneId.of("America/Los_Angeles");
DateTimeFormatter pstDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(pstZoneId);
ZonedDateTime pstZonedDateTime = ZonedDateTime.parse(time, pstDateTimeFormatter);
3、获取所在时区的时间戳
String region = "America/Los_Angeles";
ZoneId pstZoneId = ZoneId.of(region);
long nowTime = ZonedDateTime.now(pstZoneId).toInstant().toEpochMilli(); //nowTime时间戳
当然还有其他方式获取得到,网上有很多工具类~~~
二、创建地区/时区枚举类
region属性表示时间,timeZone表示时区
还有一点要注意的,一些国家有冬令时和夏令时的区分,比如美国、德国、法国等,这里我同一用了协同世界时
public enum TimeZoneEnum {
Asia_Shanghai("Asia/Shanghai","+8:00"),//中国-上海
Asia_Hong_Kong("Asia/Hong_Kong","+8:00"),//香港
Asia_Macau("Asia/Macau","+8:00"),//澳门
Asia_Taipei("Asia/Taip