2015-01-16 1 views
2

그래서 Joda time을 사용하고 있고 하나의 숫자 만 표시하고 싶습니다. (Joda에서 복수 화를 처리하는 방법을 알고 있습니다.Joda 시간이있는 하나의 숫자로 상대 시간을 표시하십시오. [Java]

예 :
2 years 2 months 2 weeks ago은 그냥 비를 얻을 때이 단락 추가를 몇 가지 방법을 찾고 있어요 2 years ago
2 days 2 hours 2 minutes ago 그냥 2 days ago

를 표시해야합니다 표시해야합니다 제로 번호. 나는 다른 프레임 워크에 대한 예제를 찾고 찾았지만 이미 Joda 시간을 사용하고 있으며 가능한 경우 여관에 다른 종속성을 가져 오려고하지 않습니다. 아래의 기능을 할 것입니다

protected final String toRelativeTime(final DateTime dateTime) { 
    DateTime now = new DateTime(); 
    Period period = new Period(dateTime, now); 

    PeriodFormatter formatter = new PeriodFormatterBuilder() 
      .appendYears().appendSuffix(" years") 
      .appendMonths().appendSuffix(" months") 
      .appendWeeks().appendSuffix(" weeks") 
      .appendDays().appendSuffix(" days") 
      .appendHours().appendSuffix(" hours") 
      .appendMinutes().appendSuffix(" minutes") 
      .appendSeconds().appendSuffix(" seconds") 
      .printZeroNever() 
      .toFormatter(); 
    return formatter.print(period); 
} 
+0

을하고 결국? 나는 단지 궁금하다. 조다 - 타임 (Joda-Time)은 제안 된 답변에서 볼 수있는 것처럼이 영역에서 다루기가 꽤 어렵습니다. –

답변

1

정확히 당신이 필요합니다

내가 지금 가지고있는 코드는 다음과 같다.

protected final String toRelativeTime(final DateTime dateTime) { 
    long nowLngTime = System.currentTimeMillis(); 
    DateTime now = new DateTime(); 
    long difference = Math.abs(dateTime.getTime() - nowLngTime); 
    Period period = new Period(dateTime, now); 
    PeriodFormatterBuilder formatterBuilder = new PeriodFormatterBuilder(); 
    if (difference > DateUtils.YEAR_IN_MILLIS) { 
     formatterBuilder.appendYears().appendSuffix(" year"); 
    } else if (difference > DateUtils.DAY_IN_MILLIS * 30) { 
     formatterBuilder.appendMonths().appendSuffix(" month"); 
    } else if (difference > DateUtils.WEEK_IN_MILLIS) { 
     formatterBuilder.appendWeeks().appendSuffix(" week"); 
    } else if (difference > DateUtils.DAY_IN_MILLIS) { 
     formatterBuilder.appendDays().appendSuffix(" day"); 
    } else if (difference > DateUtils.HOUR_IN_MILLIS) { 
     formatterBuilder.appendHours().appendSuffix(" hour"); 
    } else if (difference > DateUtils.MINUTE_IN_MILLIS) { 
     formatterBuilder.appendMinutes().appendSuffix(" minute"); 
    } else if (difference > DateUtils.SECOND_IN_MILLIS) { 
     formatterBuilder.appendSeconds().appendSuffix(" second"); 
    } 
    String ends = formatterBuilder.printZeroNever().toFormatter().print(period); 
    String plural = ends.startsWith("1 ")?"":"s"; 
    return plural; 
} 
1

은 당신이 검색 한 다른 프레임 워크이

private final String toRelativeTime(LocalDateTime startTime, LocalDateTime endTime) { 
    final String sufix = " ago"; 
    final Long seconds = ChronoUnit.SECONDS.between(startTime, endTime); 
    final Long minutes = ChronoUnit.MINUTES.between(startTime, endTime); 
    final Long hours = ChronoUnit.HOURS.between(startTime, endTime); 
    final Long days = ChronoUnit.DAYS.between(startTime, endTime); 
    final Long weeks = ChronoUnit.WEEKS.between(startTime, endTime); 
    final Long months = ChronoUnit.MONTHS.between(startTime, endTime); 
    final Long years = ChronoUnit.YEARS.between(startTime, endTime); 

    if(years > 0) { 
     return years.toString() + " " + checkPluralisation(years, "year", "years") + sufix; 
    } else if(months > 0) { 
     return months.toString() + " " + checkPluralisation(months, "month", "months") + sufix; 
    }else if(weeks > 0) { 
     return weeks.toString() + " " + checkPluralisation(weeks, "week", "weeks") + sufix; 
    }else if(days > 0) { 
     return days.toString() + " " + checkPluralisation(days, "day", "days") + sufix; 
    }else if(hours > 0) { 
     return hours.toString() + " " + checkPluralisation(hours, "hour", "hours") + sufix; 
    }else if(minutes > 0) { 
     return minutes.toString() + " " + checkPluralisation(minutes, "minute", "minutes") + sufix; 
    } else { 
     return seconds.toString() + " " + checkPluralisation(seconds, "second", "seconds") + sufix; 
    } 
} 
+0

Ah, Java 8. 한 줄짜리 대신 Joda-Time과 유사한 많은 작업 ;-) –

+0

어쨌든 Joda-Time은 (공식적으로 권장되는) java 로의 마이그레이션을 막을 수있는 충분한 기능을 제공하지 못한다는 것을 보여줍니다 Java 8에서 .time. 적어도 (여전히 길다) 해결 방법은 Joda-Time에서와 거의 동일한 노력이며 누락 된'PeriodFormatter'를 대체하는 방법을 마이그레이션하려는 사람들을 보여줄 수 있습니다. –

+0

@MenoHochschild가 동의합니다. 조금 느립니다. Joda-Time에서 실제로 Java 8을 사용하지 않았으므로 Java 8을 사용했습니다. – Anders

관련 문제