【问题标题】:Calendar gives -12 hours back日历返回 -12 小时
【发布时间】:2014-02-13 15:35:01
【问题描述】:
Calendar c = Calendar.getInstance(); 
String myDateString = (String) DateFormat.format("yyyy-MM-dd hh:mm", c.getTime());

dateTv.setText(myDateString);

输出是:

2014-02-13 04:31

时间实际上不是 04,而是 16,我的意思是在名词之后,而不是在午夜(凌晨 4 点)之后,如果你知道我的意思的话。

为什么会发生,我该如何解决?

编辑:

对于可爱的 -1 选民:

正如有人建议的那样:

  String myDateString = (String) DateFormat.format("yyyy-MM-dd HH:mm", c.getTime());

这个解决方案给了我这个确切的字符串:

2014-02-13 HH:45

是的。在我的时间里有 2 个“H”字符。它是一个 H 字符,而不是一个数字。

【问题讨论】:

  • 您是否尝试将“hh”替换为“kk”?检查这个:stackoverflow.com/a/7078488/2065418
  • 添加这个作为答案,我会接受它。
  • +1 to both for perfect argument ..HH 仅显示 char "HH" 并且 kk 在我测试时在这里工作正常..

标签: android android-date


【解决方案1】:

使用HH

hh 指使用 PM 和 AM 的小时数。其中你没有显示

String myDateString = (String) DateFormat.format("yyyy-MM-dd HH:mm", c.getTime());

根据Android documentation

H = 一天中的小时 (0-23)

h = 上午/下午 (1-12) 小时

编辑:17 以下的 API 不支持 H 似乎存在某种问题,因此最好使用 kk,这实际上是正确的 HH 实现。

Up to API level 17, only {@code adEhkMmszy} were supported. Note that this class incorrectly implements {@code k} as if it were {@code H} for backwards compatibility.

【讨论】:

  • 我相信使用aaa 会在最后显示上午/下午。 - "yyyy-MM-dd hh:mm aaa"
  • @AdamVarhegyi 我从您的 cmets 中注意到 kk 正在工作,但 HH 没有。如果您阅读我链接的文档,您会发现 kkHH 实际上是相同的,除了一个是 0-23 和 1-24。我假设您是否希望午夜显示为 24:00 或 00:00。 KKhh 相同,但略有不同。相反,您在字符串中得到 HH 的事实无法正常运行。 (HH 是常态,而不是 kk
  • @AdamVarhegyi 经过一番挖掘,它似乎是一个 API 错误。 H 此后在 API 17 及更高版本上得到支持。并且k 被实现为就好像它是H 以实现向后兼容性。 stackoverflow.com/questions/16763968/…
【解决方案2】:

尝试将“hh”替换为“kk”,如下所示:

Calendar c = Calendar.getInstance(); 
String myDateString = (String) DateFormat.format("yyyy-MM-dd kk:mm", c.getTime());

dateTv.setText(myDateString);

从这里:https://stackoverflow.com/a/7078488/2065418

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 2016-02-11
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多