我想要将长值转换为格式化时间。 我使用的代码:
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.startTime
是startTimeInSeconds
StartTime
是一个字符串。
当我显示StartTime
时,它没有给我正确的时间
例如,当startTimeInSeconds
为2510823
时,它必须为0:41:50,823
,但我得到1:41:50,823
。
我不知道我做错了什么,如果我显示小时分钟......就像这样:
int hours = (int) (SU.startTime / (60 * 60 * 1000));
然后我得到正确的值。
有谁知道这个问题的解决方案是什么?
答案 0 :(得分:6)
我的猜测是你在英国或法国,1970年1月1日的时区是GMT + 1。如果您将时区设置为“GMT”,则不会出现此问题。
答案 1 :(得分:5)
通过指定时区可以解决当前问题,正如其他人所建议的那样。但是,更微妙的问题是您使用的是不合适的类型。你只有一个持续时间,通过它的声音 - 或可能一天中的时间;目前还不清楚。如果您可以使用正确的类型,那么时区不应该涉及 - 毕竟,“以秒为单位的开始时间”在逻辑上没有与之相关的时区。
不幸的是,Java并没有真正的类型来涵盖这一点。您有Date
和Calendar
,两者都不合适。我建议您改用Joda Time,根据您的要求使用Duration
或LocalTime
类型 - 然后为该类型使用适当的格式化程序,而不是遇到这个问题。
Joda Time是一个更好的日期/时间处理API - 我强烈建议您尽可能优先使用Java API。
编辑:正如评论中所述,您还需要格式字符串中的HH
而不是hh
,因为您希望24小时制以将午夜显示为00而不是12。
答案 2 :(得分:1)
可能是您使用的TimeZone的情况。如果您没有指定,则默认提供给DateFormat。
答案 3 :(得分:0)
您最好开始使用日历而不是日期。你需要对此进行一些研究。