【问题标题】:Java.util.date value differs between iphone and CN1 simulator using SimpleDateFormatiphone 和 CN1 模拟器使用 SimpleDateFormat 的 Java.util.date 值不同
【发布时间】: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


【解决方案1】:

确保您使用的是来自com.codename1.l10n 包的SimpleDateFormat,而不是来自java.text 的包,以便在平台之间实现更好的一致性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2020-05-02
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多