gpt4 book ai didi

java - Android 日期时区让我抓狂

转载 作者:太空宇宙 更新时间:2023-11-03 10:31:35 25 4
gpt4 key购买 nike

我有一个可与 GPS 模块和 SQLite 数据库配合使用的 Android 应用程序。一开始一切听起来都很好,但当我需要使用 Date() 和时区时,恐惧就来了。

一点背景

GPS 模块可以从卫星获取日期。这是一件好事,我需要在我的应用程序中使用它来确保有效数据。从它返回的日期是 GMT 时间。此日期作为开始时间插入到本地数据库的字段中。 StartTime 使用 AES 加密存储。当我解密 StartTime 时,我需要将其转换为日期并保持格式为 GMT。

我做什么在 LocationListener 中获取 GPS 数据:

gpsDate = new Date(location.getTime());

默认情况下,通过使用 new Date(),GPS 日期将转换为设备的当前时区。因此,我得到的不是 Sun Dec 05 14:00:00 GMT 2010 时间,而是 Sun Dec 05 16:00:00 GMT+2 2010。为什么这样做?我只是想要 getTime() 中的新日期。

我在数据库中插入数据:

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String date = outputFormat.format(gpsDate);

我在需要时检索日期:

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
outputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String myStored = {decrypy from the database}
Date myStartDate = outputFormat.parse(myStoredDate);

myStored 节目:2010-12-05 14:00

myStartDate 显示:Sun Dec 05 16:00:00 GMT+2 2010

我在这里缺少一些东西。我需要能够获取 GMT 格式的日期、插入它、转换它、比较它、计算差异。仅当我需要向他显示时,我才需要用户时区中的日期。

请照亮我。

最佳答案

问题似乎是您没有存储时区。你自己说过 myStored,当从你存储它的任何地方检索时,返回时没有 TZ。然后,当您对其调用 parse 时,您会强制它使用 GMT。由于格林威治标准时间与您本地的时区相差 2 小时,因此显示的时间也相差 2 小时。

简而言之,您应该能够获取卫星时间,使用带有 z 或 Z 选项的 simpledateformat 将输出格式化为您存储它的任何位置。您甚至根本不应该使用 setTimezone 方法。然后使用与以前相同的 dateformatter 而不是新的 dateformatter 从存储它的位置解析传入的日期。

完成后,在将输出发送给用户之前,确定他们的时区,然后在您拥有的数据上设置时区。

关于java - Android 日期时区让我抓狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4360211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com