java - 是否有 API 方法可以将 BigDecimal(秒) 转换为年、月、日、小时、分钟、秒?

标签 java time bigdecimal

问题的标题包含所有详细信息。

如果我有 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 - 是否有 API 方法可以将 BigDecimal(秒) 转换为年、月、日、小时、分钟、秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835197/

相关文章:

java - 将 BigInteger 与 BigDecimal 进行比较

java |两个JButton中的ActionListener,没有响应

java - 使用和不使用泛型创建 set/list/map 的实例有多少种合法方法

java.io.IOException : Cannot run program 异常

python - 如何在Python中在给定的时间点调用函数?

java - 将 java BigDecimal 中的 6.51 更改为 6.50

java - 在 macOS 上通过 brew 安装 JRE(但不是 JDK)

python - 将 utc 时间字符串转换为 unix 时间戳

java - C 中的 System.nanoTime() 等价物

java - 使用 BigDecimal 将比例设置为负数