【问题标题】:Converting millisecond to Datetime gives incorrect time将毫秒转换为日期时间会给出不正确的时间
【发布时间】:2013-01-25 10:36:59
【问题描述】:

我想将长值转换为格式化时间。 我使用的代码:

long startTimeInSeconds = 60*60*1000*sH + 60*1000*sM + sS*1000 + sL;
SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss,SSS");
Date start= new Date(SU.startTime);
StartTime = dateFormat.format(start);

这里 sH sM .. 是小时分钟 .. 来自字符串,格式如下:"hh:mm:ss,SSS"
SU.startTimestartTimeInSeconds
StartTime 是一个字符串。

当我显示 StartTime 时,它没有给我正确的时间。
例如,当startTimeInSeconds2510823 时,它必须是0:41:50,823 但我得到1:41:50,823
我不知道我做错了什么,如果我显示小时分钟......像这样:

int hours = (int) (SU.startTime / (60 * 60 * 1000));

然后我得到正确的值。

有谁知道这个问题的解决方案是什么??

【问题讨论】:

  • 日期包括一个时区 - 例如,如果您的时区为 GMT + 1(或 -1,不确定),它将显示 1:41 而不是 0:41。
  • @assylias 你又住在哪里。 ;)
  • 可能是这个问题,我的 time zome 是 gmt +1,但是如果我设置为 gmt,小时是 12,gmt-1 的时间是 11,在 +1 上是 1,但是哪里是零?:)
  • @executioner:您使用的是hh,它给出了 12 小时制。如果你想要 24 小时制(它会给出 00),你需要 HH 而不是 hh。 (我已将其编辑到我的答案中。)

标签: java android date time


【解决方案1】:

我猜你在英国或法国,1970 年 1 月 1 日的时区是 GMT+1。如果您将时区设置为“GMT”,则不会出现此问题。

【讨论】:

  • 我试过 dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));小时是 12,-1 是 11,等等。
【解决方案2】:

正如其他人所建议的那样,通过指定时区可以解决直接问题。但是,一个更微妙的问题是您使用了不合适的类型。你只有有一个持续时间,通过它的声音 - 或可能一天中的某个时间;目前还不清楚。如果您可以使用正确的类型,则此处不应涉及时区 - 毕竟,“以秒为单位的开始时间”在逻辑上没有与之相关的时区。

不幸的是,Java 并没有合适的类型来涵盖这一点。你有DateCalendar,这两个都不合适。我建议您改用Joda Time,您可以根据您的要求使用DurationLocalTime 类型 - 然后为该类型使用适当的格式化程序,您就不会遇到这个问题。

Joda Time 是一个更好的一般日期/时间处理 API - 我强烈建议尽可能使用它而不是 Java API。

编辑:如 cmets 中所述,您还需要在格式字符串中使用 HH 而不是 hh,因为您需要 24 小时制以便将午夜显示为 00 而不是 12。

【讨论】:

  • 非常感谢,更改为 HH 并设置时区 dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")) 成功了。
  • @executioner:但是你有没有理解我更广泛的观点?在这里使用SimpleDateFormatDate 并不真的 合适。我强烈建议您花一点时间进行更广泛的更改,从长远来看会获得更大的利益。
  • 是的,谢谢你,我会看看 Joda Time,稍后我会改成那个,但首先我想实现最常用的功能。稍后会优化:)
【解决方案3】:

这可能是您使用的 TimeZone 的情况。如果您未指定,则将默认值提供给 DateFormat。

【讨论】:

    【解决方案4】:

    您最好开始使用日历而不是日期。您需要对此进行一些研究。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多