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

将小时数格式化为Java 20h 10m 5000s至20h 10m 10s

如何解决将小时数格式化为Java 20h 10m 5000s至20h 10m 10s

我正在尝试创建一个小程序,我们给它一个错误的时间,例如:20h 10m 5000s,然后将其转换为20h 10m 50s。但是我无法向您显示代码,看看您是否可以帮助我,非常感谢:)

import java.util.Date;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;

public class EejercicioBasico3 {
    public static void main(String[] args) {
        
        Date date = new Date();
        SimpleDateFormat dateForm = new SimpleDateFormat("HH:mm:ss");
 
        String UserDate = dateForm.format(JOptionPane.showInputDialog("Escriba una hora en formato hh-mm-ss"));
        
        System.out.println(date);
        System.out.println(UserDate);
    
    }
}

解决方法

删除多余的数字

我倾向于从您的问题和评论中了解到,您假设用户可能错误输入了太多数字。我进一步假设每个数字的取值范围可以是0或00到59,并且将删除大于59或大于2的数字。它可能并不完美,但可能会让您入门。

    String inputTimeString = "20h 10m 5000s";
    String outputTimeString
            = inputTimeString.replaceAll("([6-9]|[0-5]\\d)\\d+","$1");
    System.out.println(outputTimeString);

输出为:

20h 10m 50s

正则表达式首先匹配6 – 9范围内的一个数字或匹配以0到5开头的两个数字,以确保我们最多得到59个字符。正则表达式。在组之后,将匹配任意数量的多余数字。在替换字符串中,我使用$1来表示应该用捕获组号中匹配的数字替换数字。 1(在这种情况下是唯一的捕获组)。

尝试另一个示例:

    String inputTimeString = "60h 010m 777s";

6h 01m 7s

预订:如果这是学校的基本练习,则您的老师可能会想到其他解决方案,但您可以更好地判断。如果您尚未学习正则表达式,则可能不应该提交使用它们的解决方案。也许您可能希望遍历输入字符串,然后将确定的字符添加到收集输出的字符串缓冲区中。

将多余的秒数转换为分钟和小时

如果您想将超过59秒的多余秒数转换为分钟和小时,请使用Duration类:

    String isoTimeString = "PT" + inputTimeString.replaceAll(" ","");
    Duration dur = Duration.parse(isoTimeString);
    String outputTimeString = String.format("%dh %dm %ds",dur.toHours(),dur.toMinutesPart(),dur.toSecondsPart());
    
    System.out.println(outputTimeString);

21h 33m 20s

Duration.parse()需要ISO 8601格式。这是从您的格式中获得的,方法是在前缀PT(考虑时间段 )上加上空格。 String.format()调用将重现您的格式。

始终避免使用Date和SimpleDateFormat

您尝试使用的类SimpleDateFormatDate的设计很差,而且已经过时了,绝不打算从事此类工作。我建议您不要使用它们,而总是使用java.time(现代Java日期和时间API)来进行时间工作。 Duration类是java.time的一部分。

链接

,

我认为最重要的是...只是不接受以下内容:20h 10m 5000s。尽管数据是通过输入对话框窗口提供的,但仍可以验证其是否包含所需的格式(清楚地显示为该对话框中的示例),如果不是,则通知用户再次输入。您的代码确实不需要容纳所有拼写错误并自动更正它。但是,它应确定有错字并通知用户改正或完全放弃输入数据。您的应用程序设置规则,而不是用户(但不幸的是,并非所有情况都设置规则)。这看起来似乎很钝,但是您不能使所有的白痴都得到证明,因为明天会有更好的白痴。让白痴做对。

确定应用程序的时间输入规则:

  • 时间应以三个特定单位:小时分钟第二
  • 时间采用 24小时制,表示没有AM或PM。
  • 每个时间单位(小时,分钟或秒)应由两位整数(例如:15-32-05)组成。
  • 每次都要使用分隔符 进行分隔 单元。在这种情况下,允许使用的字符是连字符(-)或减号。

String userTime = "";
while (userTime.isEmpty()) {
    userTime = JOptionPane.showInputDialog(null,"<html>Enter a time in "
                + "<font color=red><b>hh-mm-ss</b></font> format:<br><br></html>");
    if (userTime == null) {
        JOptionPane.showMessageDialog(null,"Time entry Canceled!","Entry Canceled",JOptionPane.WARNING_MESSAGE);
        return;
    }
    if (!userTime.matches(
               "^([0-1][0-9][-]|[2][0-3][-])([0-5][0-9][-])([0-5][0-9])$")) {
        JOptionPane.showMessageDialog(null,"Invalid Time format supplied!","Invalid Entry",JOptionPane.WARNING_MESSAGE);
        userTime = "";
    }
}

String[] timeUnits = userTime.split("-");
String time = new StringBuilder("").append(timeUnits[0]).append("h ")
                 .append(timeUnits[1]).append("m ").append(timeUnits[2])
                 .append("s").toString();
JOptionPane.showMessageDialog(null,"<html>User supplied the time of:<br><br>"
        + "<center><font color=blue><b>" + time + "</b></font></center></html>",JOptionPane.INFORMATION_MESSAGE);

很显然,您不需要循环执行此类操作,但是您肯定知道了。

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