调用API接口时,每隔几条遇到Request has expired错误信息,原因是因为发起请求的时间超过了签名的有效时间,或者是本地系统时间和所在时区的时间不一致。
解决办法:第一种是重新获取有效的请求签名再进行 API 操作,第二种是将时间戳从系统时间换成北京时间,也可以将机器时间改动1分钟前后都可以(暂时方法)。
Java代码实现如下:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// 获取当前系统默认时区的UTC时间
Instant utcInstant = Instant.now();
// 将UTC时间转换为北京时区的时间
ZoneId beijingZoneId = ZoneId.of("Asia/Shanghai");
ZonedDateTime beijingDateTime = ZonedDateTime.ofInstant(utcInstant, beijingZoneId);
// 获取北京时间的时间戳(以秒为单位)
long beijingTimestamp = beijingDateTime.toEpochSecond();
// 输出北京时间戳
System.out.println("当前北京时间戳: " + beijingTimestamp);
}
}