java中的millis字符串格式

java中的millis字符串格式,java,string,format,decimal,Java,String,Format,Decimal,我有以下代码: public String calculateHoursFromMilliSeconds(long totalMilliSeconds) { long totalSeconds = totalMilliSeconds / 1000; long milli = totalMilliSeconds % 1000; long hours = totalSeconds / 3600; long minutes = (to

我有以下代码:

  public String calculateHoursFromMilliSeconds(long totalMilliSeconds) {
        long totalSeconds = totalMilliSeconds / 1000;
        long milli = totalMilliSeconds % 1000;
        long hours = totalSeconds / 3600;
        long minutes = (totalSeconds % 3600) / 60;
        long seconds = totalSeconds % 60;
        return String.format("%02d:%02d.%03d", hours, minutes, seconds, milli);
    }
然而

输入412毫秒

我得到的输出是
00:00.004
,而不是
00:00.412

用于输入60412毫秒


我得到的是输出
01:00.004
而不是
01:00.412

格式字符串中少了一个
%02d
。试试这个:

return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milli);
//                     HH : MM : SS . milli
:


或者,如果
0
,则删除
hours
。添加以下条件:

if(hours == 0) return String.format("%02d:%02d.%03d", minutes, seconds, milli);

格式字符串中少了一个
%02d
。试试这个:

return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milli);
//                     HH : MM : SS . milli
:


或者,如果
0
,则删除
hours
。添加以下条件:

if(hours == 0) return String.format("%02d:%02d.%03d", minutes, seconds, milli);

如果您有兴趣将Epoch转换为java可读格式,请执行以下操作:

String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));
或使用日历逐个获取:

Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(millisec*1000);
    int mYear = calendar.get(Calendar.YEAR);
    int mMonth = calendar.get(Calendar.MONTH);
    int mDay = calendar.get(Calendar.DAY_OF_MONTH);

etc

如果您有兴趣将Epoch转换为java可读格式,请执行以下操作:

String date = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (epoch*1000));
或使用日历逐个获取:

Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(millisec*1000);
    int mYear = calendar.get(Calendar.YEAR);
    int mMonth = calendar.get(Calendar.MONTH);
    int mDay = calendar.get(Calendar.DAY_OF_MONTH);
etc

这应该可以:

public String calculateHoursFromMilliSeconds(long totalMilliSeconds) {
    long totalSeconds = totalMilliSeconds / 1000;
    long milli = totalMilliSeconds % 1000;
    long hours = totalSeconds / 3600;
    long minutes = (totalSeconds % 3600) / 60;
    long seconds = totalSeconds % 60;

    DecimalFormat formatter = new DecimalFormat("###");
    formatter.setRoundingMode(RoundingMode.HALF_UP);
    String millisStr = formatter.format(milli);

    return String.format("%02d:%02d."+millisStr, hours, minutes, seconds);
}
这应该起作用:

public String calculateHoursFromMilliSeconds(long totalMilliSeconds) {
    long totalSeconds = totalMilliSeconds / 1000;
    long milli = totalMilliSeconds % 1000;
    long hours = totalSeconds / 3600;
    long minutes = (totalSeconds % 3600) / 60;
    long seconds = totalSeconds % 60;

    DecimalFormat formatter = new DecimalFormat("###");
    formatter.setRoundingMode(RoundingMode.HALF_UP);
    String millisStr = formatter.format(milli);

    return String.format("%02d:%02d."+millisStr, hours, minutes, seconds);
}

您已尝试获取包含4个参数的格式
%02d:%02d.%03d
(这里您给出了3个)。所以你错过了
milli
。不是要格式化的
milli
,而是格式化了
second

代码应为:

String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milli)

您已尝试获取包含4个参数的格式
%02d:%02d.%03d
(这里您给出了3个)。所以你错过了
milli
。不是要格式化的
milli
,而是格式化了
second

代码应为:

String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, milli)

我知道这并不是在回答你的问题,但本质上并不是在做你想做的事情?你在计算毫秒部分,也就是每秒的1/1000。因此,此代码按预期工作。。它不应该是400而是004。对于
60412
,我得到了输出
00:01.000
。不,我在处理时间跨度。不是Date要么我看不见要么你们有4个参数,列表上只有3个<代码>返回字符串。格式(“%02d:%02d.%03d”,小时,分钟,秒,毫秒)我知道这不是在回答你的问题,但实际上并不是在做你想做的事情?你在计算毫秒部分,它是每秒的1/1000。因此,此代码按预期工作。。它不应该是400而是004。对于
60412
,我得到了输出
00:01.000
。不,我在处理时间跨度。不是Date要么我看不见要么你们有4个参数,列表上只有3个<代码>返回字符串。格式(“%02d:%02d.%03d”,小时,分钟,秒,毫秒)不是,因为没有足够的格式说明符,您仍然缺少秒数。见John的答案。不,不是,因为没有足够的格式说明符,您仍然错过了秒数。请参见John的答案。
小时
分钟
毫秒
字段与当前问题更相关。但是,使用
日历
来实现这一点仍然是个好主意。字段
小时
分钟
毫秒
与当前问题更相关。但是,使用
日历来实现这一点仍然是一个好主意。