【发布时间】:2011-05-20 14:24:44
【问题描述】:
我有一个与 GPS 模块和 SQLite 数据库配合使用的 Android 应用程序。一开始一切听起来都很好,但是当我需要使用 Date() 和时区时,恐惧就来了。
一点背景
GPS 模块可以从卫星获取日期。这是一件很棒的事情,我需要在我的应用程序中使用它来确保有效数据。从它返回的日期是格林威治标准时间。 此日期作为 StartTime 插入到本地数据库中的字段中。 StartTime 使用 AES 加密存储。当我解密 StartTime 时,我需要将其转换为 Date 并保持格式为 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 格式的日期、插入、转换、比较、计算差异。只有当我需要向他展示时,我才需要用户时区中的日期。
请照亮我。
【问题讨论】:
-
如果您只是要将 DATE 对象放入数据库,为什么还需要它。只需输入您从 location.getTime() 获得的时间
-
嗯,这是一个强项...我会尝试看看它是如何工作的。
-
有些东西没有加起来,myStartDate 是一个日期,在这里你只显示部分代码,当你说“显示”时,它作为日期显示你是什么意思?在调试器中? ins system.out.println?如果您这样做,我很确定即使您将日期本身解析为 GMT,日期默认首选项仍以设备格式显示,如果您希望它以您的时间格式显示,您必须创建另一种日期格式并将其时区设置为 GMT .
标签: java android date timezone