Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法把纳秒时间转换成不带零的字符串?_Java_String_Time - Fatal编程技术网

Java 有没有办法把纳秒时间转换成不带零的字符串?

Java 有没有办法把纳秒时间转换成不带零的字符串?,java,string,time,Java,String,Time,预期结果是“2012年2月前的最后一场比赛”或“3月前的最后一场比赛” 目前这是“2012年前的最后一场游戏”。我在SimpleDataFormat中找不到可以做到这一点的东西,我看到的最简单的解决方案是使用StringBuilder,每次都测试值是否为零 代码示例: public String getLastgame() { long time = ((System.currentTimeMillis() / 60000) - this.config.getLastgameTime()

预期结果是“2012年2月前的最后一场比赛”或“3月前的最后一场比赛”

目前这是“2012年前的最后一场游戏”。我在SimpleDataFormat中找不到可以做到这一点的东西,我看到的最简单的解决方案是使用StringBuilder,每次都测试值是否为零

代码示例:

public String getLastgame()
{
    long time = ((System.currentTimeMillis() / 60000) - this.config.getLastgameTime());

    return ("Last game " + (time / 60) + "h " + (time % 60) + "m ago.");
}

获取字符串中“d”、“m”和“h”的索引。检查索引-1和索引-2处的字符值。如果索引-2是一个空格,请检查索引-1。如果是0,请删除这些索引。这是一种方法。

你的时间是以分钟为单位的,所以,首先提取你所有的时间成分:

long oneYear = 60 * 24 * 365;
long oneDay = 60 * 24;
long oneHour = 60;

// extract years
int years = time / oneYear;
// update your time
time = time % oneYear;

// extract days
long days = time / oneDay;
// update your time
time = time % oneDay;

// extract hours    
long hours = time / oneHour;

// extract minutes (the remaining)
minutes = time % oneHour;
然后,构建字符串:

StringBuilder sb = new StringBuilder( "Last time " );
if ( years != 0 ) {
    sb.append( years ).append( "y " );
}
if ( days != 0 ) {
    sb.append( days ).append( "d " );
}
if ( hours != 0 ) {
    sb.append( hours ).append( "h " );
}
if ( minutes != 0 ) {
    sb.append( minutes ).append( "m " );
}
sb.append( " ago" );
完整的方法将是:

public String getLastgame() {

    long time = ((System.currentTimeMillis() / 60000) - this.config.getLastgameTime());

    long oneYear = 60 * 24 * 365;
    long oneDay = 60 * 24;
    long oneHour = 60;

    // extract years
    int years = time / oneYear;
    // update your time
    time = time % oneYear;

    // extract days
    long days = time / oneDay;
    // update your time
    time = time % oneDay;

    // extract hours    
    long hours = time / oneHour;

    // extract minutes (the remaining)
    minutes = time % oneHour;

    StringBuilder sb = new StringBuilder( "Last time " );
    if ( years != 0 ) {
        sb.append( years ).append( "y " );
    }
    if ( days != 0 ) {
        sb.append( days ).append( "d " );
    }
    if ( hours != 0 ) {
        sb.append( hours ).append( "h " );
    }
    if ( minutes != 0 ) {
        sb.append( minutes ).append( "m " );
    }
    sb.append( " ago" );

    return sb.toString();

}

请出示一些代码<代码>在纳秒内取决于您的机器;)我还可以做一些类似于
(小时==0)的事情?(hours+“h”):“
我猜,但我不太喜欢它。这似乎是非常错误的,因为我正在构建字符串,在之后检查和删除值不是很有效。这就是我想要的,我没有看到其他任何东西。这将在许多地方使用,所以我可能会将其变成一个静态方法,感谢代码。