国外时间快了一个小时

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 {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值