Date 黑莓日期解析和一小时';差异

Date 黑莓日期解析和一小时';差异,date,blackberry,java-me,Date,Blackberry,Java Me,由于BlackBerry上日期解析的限制,我正在尝试使用自己的解析/解压方法,但不知何故,我似乎在某个地方遇到了一个小时的差异 我这样做: long nowLong = System.currentTimeMillis(); String nowString = DateParser.longToString(nowLong); Date nowDateFromString = DateParser.stringToDate(nowString); Date nowDateFromLong =

由于BlackBerry上日期解析的限制,我正在尝试使用自己的解析/解压方法,但不知何故,我似乎在某个地方遇到了一个小时的差异

我这样做:

long nowLong = System.currentTimeMillis();
String nowString = DateParser.longToString(nowLong);
Date nowDateFromString = DateParser.stringToDate(nowString);
Date nowDateFromLong = DateParser.longToDate(nowLong);
当按顺序输出时,它在控制台中产生:

[139.46] 1369132556831
[139.46] 21 May 2013 11:35:56 Europe/Dublin
[139.46] Tue May 21 12:35:56 Europe/Dublin 2013
[139.46] Tue May 21 11:35:56 Europe/Dublin 2013
我的模拟器的时间设置为11:35,因此第三条语句-
DateParser.stringToDate()
-似乎在某个地方失败了

以下是我的实现:

public static Date stringToDate(String date) {
    long l = HttpDateParser.parse(date);
    Date d = new Date(l);

    return d;
}
由于我的
nowString
包含时区,我希望
HttpDateParser.parse()
能够考虑到这一点,但似乎没有

如何更正此问题?

记录用于处理“GMT”或“TZD”,我假设它是“时区指示器”。我怀疑这应该是一种(可怕的、模棱两可的)缩写格式——例如,它可能值得尝试解析

21 May 2013 11:35:56 BST
看看你能得到什么。这至少可以进一步诊断
HttpDateParser
的行为。在我看来,保留时区的TZDB ID是一个更好的主意,但是您可能需要编写自己的解析代码。不过,您仍然需要处理本地时间模糊性,因为DST转换会导致特定的本地时间出现两次

在您的情况下,输入或预期输出是什么并不完全清楚——您对格式的控制程度如何。我会尽量使用ISO-8601,如果你需要的话,还可以使用时区标识。(如果您只是试图在时间上表示一个瞬间,我会使用UTC瞬间的ISO-8601表示,并用一个Z后缀来表示UTC。)

记录用于处理“GMT”或“TZD”,我认为这是一个“时区指示符”。我怀疑这应该是一种(可怕的、模棱两可的)缩写格式——例如,它可能值得尝试解析

21 May 2013 11:35:56 BST
看看你能得到什么。这至少可以进一步诊断
HttpDateParser
的行为。在我看来,保留时区的TZDB ID是一个更好的主意,但是您可能需要编写自己的解析代码。不过,您仍然需要处理本地时间模糊性,因为DST转换会导致特定的本地时间出现两次


在您的情况下,输入或预期输出是什么并不完全清楚——您对格式的控制程度如何。我会尽量使用ISO-8601,如果你需要的话,还可以使用时区标识。(如果您只是试图在时间上表示一个瞬间,我会使用UTC瞬间的ISO-8601表示,并用Z后缀表示UTC。)

Aha,谢谢Jon。这无疑为我指明了正确的方向。。。该页示例的下半部分(天知道我前10次是怎么漏掉的)显示了示例“YYYY-MM-DDThh:MM:ssTZD(例如1997-07-16T19:20:30+01:00)”,因此我可能应该看看如何计算设备的GMT偏移量;其目的是在数据库中存储和检索日期,然后通过web API传递该日期。从数据库中检索日期时,我遇到了一个问题,因为一个小时的时间被添加,这就是我走上这条路的原因。@Greg:您需要维护偏移量或时区吗?或者您可以只存储UTC即时数据吗?Jon:存储的日期来自用户在日期选择器中选择的数据,在通过API发送之前,可以在任何时候对其进行编辑,因此我需要实现以下几点:1。允许用户选择日期2。将其保存到数据库中,3。允许用户编辑该日期(显然可以看到它保存为的值),以及4。在通过API发送日期之前重新格式化该日期。你可能是对的;根据设备处理UTC日期的方式,这可能会起作用。现在就开始测试。@Greg:好吧,那么这只是约会吗?(没有时间吗?)(如果你能利用乔达的时间,这会更简单,但我想你不能。)啊哈,谢谢乔恩。这无疑为我指明了正确的方向。。。该页示例的下半部分(天知道我前10次是怎么漏掉的)显示了示例“YYYY-MM-DDThh:MM:ssTZD(例如1997-07-16T19:20:30+01:00)”,因此我可能应该看看如何计算设备的GMT偏移量;其目的是在数据库中存储和检索日期,然后通过web API传递该日期。从数据库中检索日期时,我遇到了一个问题,因为一个小时的时间被添加,这就是我走上这条路的原因。@Greg:您需要维护偏移量或时区吗?或者您可以只存储UTC即时数据吗?Jon:存储的日期来自用户在日期选择器中选择的数据,在通过API发送之前,可以在任何时候对其进行编辑,因此我需要实现以下几点:1。允许用户选择日期2。将其保存到数据库中,3。允许用户编辑该日期(显然可以看到它保存为的值),以及4。在通过API发送日期之前重新格式化该日期。你可能是对的;根据设备处理UTC日期的方式,这可能会起作用。现在就开始测试。@Greg:好吧,那么这只是约会吗?(不涉及时间?)(如果你能利用Joda的时间,这会更简单,但我想你不能。)