问题的标题包含所有详细信息。
如果我有 BigDecimal 秒 = new BigDecimal("32365423.56");
是否有 API 方法可以将其转换为:
n年,n月,n天,n小时,n分钟,n秒。
如果时间以秒为单位不明确,则假设以秒为单位的这些值:(我不限于这些值)
BigDecimal year = new BigDecimal("31556908.8");
BigDecimal month = new BigDecimal("2629739.52");
BigDecimal day = new BigDecimal("86400");
BigDecimal hour = new BigDecimal("3600");
BigDecimal minute = new BigDecimal("60");
最佳答案
您可以使用java.time.Duration
其模型为 ISO-8601 standards并作为 JSR-310 implementation 的一部分随 Java-8 一起引入。 Java-9引入了一些更方便的方法。
演示:
import java.math.BigDecimal;
import java.time.Duration;
public class Main {
public static void main(String[] args) {
BigDecimal seconds = new BigDecimal("32365423.56");
Duration duration = Duration.ofNanos(seconds.multiply(BigDecimal.valueOf(1_000_000_000)).longValue());
System.out.println(duration);
// Custom format
// ####################################Java-8####################################
String formattedDuration = String.format("%d days %d hours %d minutes %d seconds", duration.toDays(),
duration.toHours() % 24, duration.toMinutes() % 60, duration.toSeconds() % 60);
System.out.println(formattedDuration);
// ##############################################################################
// ####################################Java-9####################################
formattedDuration = String.format("%d days %d hours %d minutes %d seconds", duration.toDaysPart(),
duration.toHoursPart(), duration.toMinutesPart(), duration.toSecondsPart());
System.out.println(formattedDuration);
// ##############################################################################
}
}
输出:
PT8990H23M43.56S
374 days 14 hours 23 minutes 43 seconds
374 days 14 hours 23 minutes 43 seconds
从 Trail: Date Time 了解现代日期时间 API 。
- 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用 ThreeTen-Backport它将大部分 java.time 功能向后移植到 Java 6 和 7。
- 如果您正在从事 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring和 How to use ThreeTenABP in Android Project .
关于java - 是否有 API 方法可以将 BigDecimal(秒) 转换为年、月、日、小时、分钟、秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835197/