【问题标题】:Convert time in minutes to HH:mm in java 11 [duplicate]在java 11中将时间以分钟为单位转换为HH:mm [重复]
【发布时间】:2021-07-19 14:55:41
【问题描述】:

我收到一个以分钟为单位的 json 有效负载,我需要将其转换为 HH:mm,甚至可能还需要设置时区,

我试过这个解决方案

  SimpleDateFormat sdf = new SimpleDateFormat("mm");
 sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    
    try {
        Date dt = sdf.parse("90");
        sdf = new SimpleDateFormat("HH:mm");
        System.out.println(sdf.format(dt));
    } catch (ParseException e) {
        e.printStackTrace();
    }

所以有任何简化的方法可以做到这一点

【问题讨论】:

  • 请查看“新”日期时间 API(java.time 包中的类)。 SimpleDateFormatjava.util.Date 不应再在新代码中使用。具体来说,DateTimeFormatter 对您来说会很有趣。
  • 但是,如果我们谈论的是持续时间而不是时间,那么this answer 显示了几种方法来做到这一点,在这种情况下,最好的方法可能是使用Duration。跨度>

标签: java timezone


【解决方案1】:

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*

使用现代日期时间 API java.time 的解决方案:

您可以使用java.time.Duration,它以ISO-8601 standards 为蓝本,并作为JSR-310 implementation 的一部分引入Java-8Java-9 引入了一些更方便的方法。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        int minutes = 123;
        Duration duration = Duration.ofMinutes(minutes);

        // Default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedDuration = String.format("%d:%02d", duration.toHours(), duration.toMinutes() % 60);
        System.out.println(formattedDuration);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedDuration = String.format("%d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println(formattedDuration);
        // ##############################################################################
    }
}

输出:

PT2H3M
2:03
2:03

ONLINE DEMO

通过 Trail: Date Time 了解有关现代日期时间 API 的更多信息。

当您说 123 分钟时,它与时区无关,即 123 分钟的持续时间在任何时区都将具有相同的值。检查Duration is not the same as Date-Time 以了解日期时间和持续时间之间的区别。通俗地说,Date-Time 就像一个向量,而 Duration 就像一个标量。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

【讨论】:

  • 谢谢你的详细解释,我也想更改时区
  • @Thejas - 当您说 123 分钟时,它与时区无关,即 123 分钟的持续时间在任何时区都将具有相同的值。检查Duration is not the same as Date-Time 以了解日期时间和持续时间之间的区别。通俗地讲,Date-Time 就像一个向量,而 Duration 就像一个标量。
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多