# 时间校准

> 来源：https://help.gravity-engine.com/docs/client-sdk/android/advanced/time-calibration
> 说明 Android SDK 如何通过时间戳或 NTP 校准事件时间，避免设备时间异常影响漏斗等分析结果。



引力引擎 SDK 会默认使用客户端本机时间作为事件发生时间，如果用户手动修改设备时间会影响到您的业务分析（尤其是漏斗分析）的准确性，此时可以通过校准时间操作保证事件发生时间的准确性。SDK 提供了时间戳和 NTP 两种时间校准方式。

## 1. 通过时间戳校准 [#1-通过时间戳校准]

您可以通过调用 calibrateTime 方法传入从服务端获取的当前时间戳对 SDK 的时间进行校准。此后，所有未指定时间的调用，包括事件数据和用户属性设置操作，都会使用校准后的时间作为发生时间。

#### 代码示例 [#代码示例]

```java
// 1733169963000 为当前 unix 时间戳，单位为毫秒，对应北京时间 2024-12-03 04:06:03
GravityEngineSDK.calibrateTime(1733169963000);
```

## 2. 通过 NTP 服务器校准 [#2-通过-ntp-服务器校准]

您可以通过调用 calibrateTimeWithNtp 方法传入 NTP 服务器地址，之后 SDK 会尝试从传入的 NTP 服务地址中获取当前时间，并对 SDK 时间进行校准。如果在默认的超时时间（3 秒）之内，仍未获取到 NTP 服务器返回的正确结果，后续将使用本地时间上报数据。

#### 代码示例 [#代码示例-1]

```java
// 使用阿里云 NTP 服务对时间进行校准
GravityEngineSDK.calibrateTimeWithNtp("ntp.aliyun.com");
```

> * 使用 NTP 服务进行时间校准存在一定的不确定性，建议您优先考虑用时间戳校准的方式
> * 您需要谨慎地选择您的 NTP 服务器地址，以保证网络状况良好的情况下，用户设备可以很快的获取到服务器时间
> * 关于 NTP 服务器相关更多信息请参考：[https://dns.icoa.cn/ntp/](https://dns.icoa.cn/ntp/)
