记一次Android中获取时间戳在Java转字符串不正确的问题

发布时间:2023年12月17日

Hi, I’m Shendi


记一次Android中获取时间戳在Java转字符串不正确的问题




问题

在 Java 中将 Android 的时间戳转字符串,发现转换的结果不正确。示例代码如下

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2023);
calendar.set(Calendar.MONTH, 11);
calendar.set(Calendar.DAY_OF_MONTH, 12);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
System.out.println(calendar.getTimeInMillis());

上面代码获取的时间戳,按道理转字符串应该是 2023-12-12 00:00:00

但我在Android中获取的时间戳为 1702339200000,在Java中转换后是 2023-12-12 08:00:00

而在Java中获取的是 1702310400000。



问题解决

排查发现到问题后,就寻找解决办法,询问GPT等没有答案(太傻了),浪费我太多时间,后面想到时区的问题,于是我将Java中的时区与Android中的时区打印出来

System.out.println(TimeZone.getDefault());

Java 输出 sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]


Android 输出 java.util.SimpleTimeZone[id=GMT,offset=0,dstSavings=3600000,useDaylight=false,startYear=0,startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,startTime=0,startTimeMode=0,endMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0,endTimeMode=0]


可以看到时区的确不一样,最后,在Android中设置时区,问题解决

// 一次性设置
calendar.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));
// 设置默认时区
TimeZone.setDefault(TimeZone.getTimeZone("GMT+08:00"));



END

文章来源:https://blog.csdn.net/qq_41806966/article/details/134945590
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。