微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 java 11 中将时间以分钟为单位转换为 HH:mm

如何解决在 java 11 中将时间以分钟为单位转换为 HH:mm

我收到一个以分钟为单位的 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();
    }

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

解决方法

java.time

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

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

您可以使用 java.time.Duration,它以 ISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分与 Java-8 一起引入。 Java-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 了解有关现代 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。