【问题标题】:Is there API methods to convert BigDecimal(seconds) to years, months, days, hours, minutes, seconds?是否有 API 方法可以将 BigDecimal(seconds) 转换为年、月、日、小时、分钟、秒?
【发布时间】:2014-07-13 03:58:33
【问题描述】:

问题的标题包含所有细节。

如果我有BigDecimal seconds = 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");

【问题讨论】:

  • 不太可能。这个问题是模棱两可的,因为一个月没有固定的大小。准确的答案不仅取决于秒数,还取决于间隔何时开始(或等效地,何时结束)。
  • @chepner 我在问题中添加了一些细节,我不知道这是否有助于。无论如何谢谢你。

标签: java time bigdecimal


【解决方案1】:

您可以将 java.util.Date 类 http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#Date%28long%29 与 java.util.Calendar 类 http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html 一起使用

你会是这样的:

long l = Math.round(seconds.doubleValue());
Date d = new Date(l);
Calendar c = new GregorianCalendar();
c.setTime(d);
int sec = c.get(Calendar.SECOND);
int min = c.get(Calendar.MINUTE);
...

【讨论】:

  • 你假设秒数代表一个特定的时间点,而不是一个时间间隔。
  • 好吧,我想我误解了这个问题
【解决方案2】:

您可以使用java.time.Duration,它以ISO-8601 standards 为蓝本,并在Java-8 中作为JSR-310 implementation 的一部分引入。 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2017-11-22
    • 2021-08-14
    • 2012-01-19
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多