exe*_*ner 0 java time android date
我想要将长值转换为格式化时间.我使用的代码:
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);
Run Code Online (Sandbox Code Playgroud)
这里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));
Run Code Online (Sandbox Code Playgroud)
然后我得到正确的值.
有谁知道这个问题的解决方案是什么?
如其他人所建议的那样,通过指定时区可以解决当前的问题.但是,更微妙的问题是您使用的是不合适的类型.你只有一个持续时间,通过它的声音 - 或者可能是一天中的时间; 目前还不清楚.如果您可以使用正确的类型,则此处不应涉及时区 - 毕竟,"以秒为单位的开始时间"在逻辑上不具有与之相关的时区.
不幸的是,Java并没有真正的类型来涵盖这一点.你有Date和Calendar,这两者都不是合适的.我建议您使用Joda Time,在那里您可以根据您的要求使用Duration或LocalTime键入 - 然后为该类型使用适当的格式化程序,您将不会遇到此问题.
Joda Time是一个更好的日期/时间处理API - 我强烈建议您尽可能使用它而不是Java API.
编辑:正如评论中所指出的,你也想要HH而不是hh你的格式字符串,因为你想要24小时制,以便将午夜显示为00而不是12.