0

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

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它没有给我正确的时间。
例如,当startTimeInSeconds是时2510823,它必须是,0:41:50,823但我明白了1:41:50,823
我不知道我做错了什么,如果我显示小时分钟......像这样:

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

然后我得到正确的值。

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

4

4 回答 4

6

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

于 2013-01-25T10:41:28.360 回答
5

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

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

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

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

于 2013-01-25T10:45:13.533 回答
1

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

于 2013-01-25T10:40:50.687 回答
0

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

于 2013-01-25T12:16:41.493 回答