code

문자열에 마침표

codestyles 2020. 12. 29. 07:07
반응형

문자열에 마침표


이 질문에 이미 답변이 있습니다.

Java와 함께 Joda-Time 라이브러리를 사용하고 있습니다. 기간 개체를 "x 일, x 시간, x 분"형식의 문자열로 바꾸는 데 어려움이 있습니다.

이러한 Period 객체는 먼저 시간 (초)을 추가하여 생성됩니다 (초 단위로 XML에 직렬화 된 후 다시 생성됨). 단순히 getHours () 등의 메서드를 사용하면 얻는 것은 모두 0이고 getSeconds를 사용한 시간 (초)입니다.

Joda가 날짜, 시간 등과 같은 각 필드의 초를 어떻게 계산하도록 할 수 있습니까?


기간을 정규화해야합니다. 총 초 수로 구성하면 그 값이 유일한 값이기 때문입니다. 정규화하면 총 일, 분, 초 등으로 나뉩니다.

ripper234에 의해 편집-TL ; DR 버전 추가 :PeriodFormat.getDefault().print(period)

예를 들면 :

public static void main(String[] args) {
  PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    .appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

  Period period = new Period(72, 24, 12, 0);

  System.out.println(daysHoursMinutes.print(period));
  System.out.println(daysHoursMinutes.print(period.normalizedStandard()));
}

다음을 인쇄합니다.

24 분 12 초
3 일 24 분 12 초

따라서 정규화되지 않은 기간에 대한 출력은 단순히 시간 수를 무시한다는 것을 알 수 있습니다 (72 시간을 3 일로 변환하지 않음).


대부분의 경우에 적합한 기본 포맷터를 사용할 수도 있습니다.

Period period = new Period(startDate, endDate);
System.out.println(PeriodFormat.getDefault().print(period))

    Period period = new Period();
    // prints 00:00:00
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
    period = period.plusSeconds(60 * 60 * 12);
    // prints 00:00:43200
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));
    period = period.normalizedStandard();
    // prints 12:00:00
    System.out.println(String.format("%02d:%02d:%02d", period.getHours(), period.getMinutes(), period.getSeconds()));

PeriodFormatter daysHoursMinutes = new PeriodFormatterBuilder()
    .appendDays()
    **.appendSuffix(" day", " days")
    .appendSeparator(" and ")
    .appendMinutes()
    .appendSuffix(" minute", " minutes")**
    .appendSeparator(" and ")
    .appendSeconds()
    .appendSuffix(" second", " seconds")
    .toFormatter();

시간을 놓치고 있으니까요. 며칠 후 몇 시간을 추가하면 문제가 해결됩니다.

참조 URL : https://stackoverflow.com/questions/1440557/period-to-string

반응형