BUG 描述:
将时区设置为智利标准时间,重启机器并GPS定位后当前日期显示错误
BUG 产生原因:
默认时间戳设置错误所致
动作/解决方案:
修改默认时间戳
最近项目遇到一个很蛋疼的问题,选择智利(圣地亚哥)之后,时间不对,比正常时间快了一个小时,使用GPS定位后时间不准。
可能是因为没有设置默认时区,采用的还是中国的时区去进行时间的显示。
+import java.util.TimeZone;
+import java.text.SimpleDateFormat;
+import java.util.Date;
// give any timezone code room without going into negative time.
private static final long EARLIEST_SUPPORTED_TIME = 86400 * 1000;
private static final long EARLIEST_SUPPORTED_TIME2 = 1514764800 * 1000L;//2018.1.1 08:00
// fix some time zone date errors,
private static final String EARLIEST_SUPPORTED_TIME_UTC = "2018-01-01 08:00:00";
private static final String EARLIEST_SUPPORTED_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
* them from the build system somehow.
@@ -719,11 +731,24 @@ public final class SystemServer {
if (alarm == null) {
Slog.d(TAG,"AlarmManagerService is null, not set time.");
} else {
- Slog.w(TAG, "Current time=" + System.currentTimeMillis() + ", EARLIEST_SUPPORTED_TIME="+EARLIEST_SUPPORTED_TIME2);
- if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME2) {
- SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME2);
+ long earliest_time = EARLIEST_SUPPORTED_TIME2;
+ try {
+ SimpleDateFormat sdf = new SimpleDateFormat(EARLIEST_SUPPORTED_TIME_FORMAT);
+ sdf.setTimeZone(TimeZone.getDefault());
+ String timeStr = SystemProperties.get("ro.earliest-time", "");
+ timeStr = (!"".equals(timeStr)) ? timeStr.trim() : EARLIEST_SUPPORTED_TIME_UTC;
+ Date date = sdf.parse(timeStr.trim());
+ earliest_time = date.getTime();
+ } catch (Exception e) {
+ Slog.d(TAG,"Error: " +e.getMessage());
+ }
+
+ Slog.w(TAG, "Current time=" + System.currentTimeMillis() + ", earliest_time="+earliest_time);
+ if (System.currentTimeMillis() < earliest_time) {
+ SystemClock.setCurrentTimeMillis(earliest_time);
try {
- boolean ret = alarm.setTime(EARLIEST_SUPPORTED_TIME2);
+ boolean ret = alarm.setTime(earliest_time);
Slog.d(TAG, "System clock is before 2018, set to 2018-01-01 8:00, ret = " + ret);
} catch (RemoteException e) {
Slog.e(TAG, "Unable to set RTC", e);
@@ -731,7 +756,9 @@ public final class SystemServer {