【问题标题】:Java format hour and minJava 格式小时和分钟
【发布时间】:2018-05-18 20:57:17
【问题描述】:

我需要像这样格式化我的时间字符串:

int time = 160;

这是我的示例代码:

public static String formatDuration(String minute) {
    String formattedMinute = null;
    SimpleDateFormat sdf = new SimpleDateFormat("mm");
    try {
        Date dt = sdf.parse(minute);
        sdf = new SimpleDateFormat("HH mm");
        formattedMinute = sdf.format(dt);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return formattedMinute;
//        int minutes = 120;
//        int h = minutes / 60 + Integer.parseInt(minute);
//        int m = minutes % 60 + Integer.parseInt(minute);
//        return h + "hr " + m + "mins";
}

我需要将其显示为 2 小时 40 分钟。但我不知道如何附加“小时”和“分钟”。要求是不要使用任何库。

如果您过去做过类似的事情,请随时提供帮助。非常感谢!

【问题讨论】:

标签: java time format duration minute


【解决方案1】:

现在是 2018 年,您真的应该使用 Java 8 中引入的日期/时间库

String minutes = "160";
Duration duration = Duration.ofMinutes(Long.parseLong(minutes));

long hours = duration.toHours();
long mins = duration.minusHours(hours).toMinutes();

// Or if you're lucky enough to be using Java 9+
//String formatted = String.format("%dhrs %02dmins", duration.toHours(), duration.toMinutesPart());
String formatted = String.format("%dhrs %02dmins", hours, mins);
System.out.println(formatted);

哪些输出...

2hrs 40mins

为什么要使用这样的东西?除了通常是更好的 API 之外,当 minutes 等于 1600 时会发生什么?

上面将显示26hrs 40mins,而不是打印2hrs 40minsSimpleDateFormat 格式化日期/时间值,它不处理持续时间

【讨论】:

  • 谢谢!但要求是不要使用任何库。我将改用您在我的生产应用程序中提供的这个示例。
  • @bEtTyBarnes 什么图书馆?使用它与使用SimpleDateFormat 有何不同?它是核心 API 的一部分
  • @bEtTyBarnes 请在您的问题中更准确地解释该要求。这似乎是一个重要的限制。 Java内置的标准库怎么样?
  • 如果 i18n 很重要,我建议使用可识别区域设置的格式化程序,例如 DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault())
  • @gb96 同意,这是使用格式化程序的更重要原因之一——但我不知道DateFormat 是否支持格式化持续时间(因为,28 小时到底是多少?)
【解决方案2】:
int minutes = 160;

int h = minutes / 60;
int m = minutes % 60;

String.format("%d hr %d mins",h,m); // output : 2 hr 40 mins

【讨论】:

    【解决方案3】:

    试试吧

    sdf = new SimpleDateFormat("HH 'hrs' mm 'mins'");
    

    有一个很好的文档https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html 来自文档:

    “可以使用单引号 (') 对文本进行引用以避免解释。”

    【讨论】:

    • 哦!我不知道可以在里面放一些单引号。
    • 当输入变为"1600"时会发生什么?这种方法会失败
    【解决方案4】:

    另一种简单的方法可能是这样的:

    public static String formatDuration(String minute){
        int minutes = Integer.parseInt(minute);
    
        int hours = minutes / 60;
        minutes = minutes % 60;
    
        return hours + "hrs " + minutes + "mins.";
    }
    

    【讨论】:

    • 滚动您自己的日期时间代码通常是个糟糕的建议。我们有优秀的 java.time 类可用;使用它们。请参阅correct Answer by MadProgrammer
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多