【问题标题】:Is there a way to convert a time in nanosecond to a String without the zeroes?有没有办法将纳秒的时间转换为没有零的字符串?
【发布时间】:2013-05-25 16:10:46
【问题描述】:

预期结果是“Last game 2h 12m ago”。或“3m 前的最后一场比赛。”。

目前是“Last game 0d 2h 12m ago.”,我在 SimpleDateFormat 中找不到任何可以做到这一点的方法,我看到的最简单的解决方案是使用 StringBuilder,每次测试值是否为零。

代码示例:

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

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

【问题讨论】:

  • 请显示一些代码
  • in a nanosecond 取决于你的机器 ;)
  • 我想我也可以做类似(hours == 0) ? (hours + "h") : "" 的事情,但我不太喜欢它。

标签: java string time


【解决方案1】:

您的时间以分钟为单位,因此,请先提取所有时间组件:

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();

}

【讨论】:

  • 这就是我想要的,我没有看到其他任何东西。这将在很多地方使用,所以我可能会将它变成一个静态方法,感谢代码。
【解决方案2】:

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

【讨论】:

  • 这似乎很错误,因为我正在构建字符串,之后检查和删除值效率不高。
猜你喜欢
  • 2019-05-28
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2021-03-03
  • 2020-12-23
相关资源
最近更新 更多