String.format,long和DateTime转换

问题描述 投票:0回答:1

如果问题重复,我很抱歉,我没有通过Google找到任何东西。

对我的问题:

我有以下测试:

public void testSecondsToMinutes() {
    long zero = 0;
    long thirty_seconds = 30;
    long one_minute = 60;
    long thirty_minutes_fiftynine_seonds = 1859;
    long two_hours_ten_miutes_fourty_seconds = 7840;

    String format1 = "00:00:00";
    String format2 = "00:00:30";
    String format3 = "00:01:00";
    String format4 = "00:30:59";
    String format5 = "02:10:40";

    assertEquals(format1,Entrypoint.secondsToMinutes(zero));
    assertEquals(format2,Entrypoint.secondsToMinutes(thirty_seconds));
    assertEquals(format3,Entrypoint.secondsToMinutes(one_minute));
    assertEquals(format4,Entrypoint.secondsToMinutes(thirty_minutes_fiftynine_seonds));
    assertEquals(format5,Entrypoint.secondsToMinutes(two_hours_ten_miutes_fourty_seconds)); 
}

和以下功能:

public static String secondsToMinutes(long seconds)
{
    return String.format("%TH:%TM:%TS", seconds, seconds, seconds);
}

Formatter的Java文档声明以下内容:

The following conversion characters are used for formatting common date/time compositions.
This conversion may be applied to long, Long, Calendar, and Date.
[...]
'R' '\u0052'    Time formatted for the 24-hour clock as "%tH:%tM"
'T' '\u0054'    Time formatted for the 24-hour clock as "%tH:%tM:%tS".

但是,我得到了以下ComparisionFailure:

expected 00:00:00 but was 01:00:00

我必须在这里遗漏一些明显的东西...

java string formatter
1个回答
0
投票

String格式方法需要一个Calendar才能工作。你不能只给秒。实际上,如果您分别启动每个测试,它们都不是绿色的。

我使用给定的here响应来编写更经典的解决方案:

public class Entrypoint {
    public static String secondsToMinutes(long seconds)
    {
        long absSeconds = Math.abs(seconds);
        String positive = String.format(
                "%02d:%02d:%02d",
                absSeconds / 3600,
                (absSeconds % 3600) / 60,
                absSeconds % 60);
        return seconds < 0 ? "-" + positive : positive;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.