【发布时间】:2018-07-12 10:53:43
【问题描述】:
实际的 iPhone 和 Iphone CN1 Simulator 值因我的 Date 对象而异,这会导致我在尝试对它们进行其他格式化(并期望它们采用特定格式)时出现下游错误。 我正在使用 Codenameone SimpleDateFormat 类将值“20180201 23:59:00”的字符串(但在对象中)转换为 java.util.Date 对象。 我的代码如下:
public static java.util.Date ObjectToDate(Object datestr) {
if (datestr == null) {
return null;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
try {
return simpleDateFormat.parse(String.valueOf(datestr));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
我将转换的值放入屏幕字段中,以便我可以使用以下方法进行验证: (已将对象本身替换为执行 object.toString() 返回的日期字符串) DateFormatting.ObjectToDate("20180201 23:59:00").toString() 我回来了
在模拟器中: 2018 年 2 月 1 日星期四 23:59:00 GMT
在实际的 iphone 上,我得到: 2018 年 2 月 1 日
为什么?我会认为它的格式与我使用 com.codename1.l10n.SimpleDateFormat 类来格式化它的格式相同。 非常感谢
【问题讨论】:
-
他们可能是一样的。不同之处可能在于您在输出它们时 格式化它们的方式。请记住,Date 对象只是包装了一个 long 值:在您格式化 Date 对象之前,您看到的字符串并不存在。如果给定两个不同的格式化函数,单个 Date 对象可能会同时生成这两个字符串。
-
那么.. 你用什么代码来输出它们?它只是 Date.toString() 吗?尝试使用 SimpleDateFormat 在两个地方输出,使用相同的格式。
-
在我的调试中,我正在执行 Date.toString() 来获取值。我的下游问题是我将 Date 对象转换为 json 格式(使用 gson),然后它作为字符串(在设备上以不同的格式)到达我的端点,然后当我将它插入我的 mysql 列时失败使用 strtodate 函数(因为它需要某种格式)。我再看看能不能发现问题。
-
好吧,破解了它。就像你说的那样,这就是设备输出 Date.toString() 的方式。但是当我再次使用 SimpleDateFormat 将日期转换为字符串时,该值是相同的。因此,我将用格式化程序替换 toString(),而不是将其添加到 json 字符串中。谢谢
-
是的,这可以解释。 (afaik)没有关于 Date.toString() 返回的合同。在不同的系统上可以是不同的格式,使用不同的rt.jar。
标签: codenameone