【问题标题】:SimpleDateFormat: hours are HH after parsingSimpleDateFormat:解析后的小时数为 HH
【发布时间】:2013-09-25 13:40:44
【问题描述】:

我有一个String,即2013-8-25, 16:33,现在我需要将其转换为Date。为此,我使用:

Date mDate = new SimpleDateFormat("yyyy-MM-dd, HH:mm").parse("2013-8-25, 16:33");

然后我需要得到一个正确模式的String,即

private static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";

这是我的做法:

  public static String convertDateToString(Date date) {
        String string = DateFormat.format(DATE_PATTERN, date).toString();
        Logger.logVerbose(TAG, "Date converted into String is " + string);
        return string;
    }

但是:

Date converted into String is 2013-08-25THH:33:00.SSSZ

为什么时间仍然是HH?谢谢!

【问题讨论】:

  • 这里的format 是什么?如果您能提供一个简短但完整的程序来演示该问题,那将非常有帮助。 (请注意,解析部分应该是无关紧要的 - 只需使用new Date() 创建示例Date 进行格式化。)
  • 哦,对不起,我已经更正了代码 sn-p。
  • 那仍然不是有效的代码。 DateFormat 上没有静态的 format 方法。再次,请展示一个简短但完整的程序。我们应该能够将它复制到一个新的文本文件中,编译并运行它而无需进一步更改。 (我的猜测是你的 DATE_PATTERN 字符串实际上不是那个,但在你给我们一些东西来重现它之前我们无法知道。)
  • 好像毫秒部分也是SSS...
  • @JonSkeet,你是​​对的,DateFormat 来自import static android.text.format.DateFormat.format

标签: java android datetime simpledateformat


【解决方案1】:

我强烈怀疑您遇到了与DateFormat 的兼容性问题。特别是,从文档中:

此类中的格式方法实现了 Unicode UTS #35 模式的子集。此类当前支持的子集包括以下格式字符:acdEHhLKkLMmsyz。直到 API 级别 17,仅支持 adEhkMmszy。请注意,这个类错误地实现了 k,就好像它是 H 一样以实现向后兼容性。

我建议您使用SimpleDateFormat 进行格式化,以避免此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多