【问题标题】:JTextField time in HH:mm:ssHH:mm:ss 中的 JTextField 时间
【发布时间】:2011-05-06 17:27:27
【问题描述】:

我有一个特定任务所需的估计时间(以分钟为单位)。如何以HH:mm:ss 的格式将其放入 JFormattedTextField 中?

【问题讨论】:

标签: java swing time formatting jformattedtextfield


【解决方案1】:

对于 Calendar 和 DateFormat

float minutes = 100.5f; // 1:40:30

Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.add(Calendar.MINUTE, (int) minutes);
c.add(Calendar.SECOND, (int) ((minutes % (int) minutes) * 60));
final Date date = c.getTime();

Format timeFormat = new SimpleDateFormat("HH:mm:ss");
JFormattedTextField input = new JFormattedTextField(timeFormat);
input.setValue(date);

但请注意,如果您的浮点数大于或等于 1440(24 小时),Calendar 方法只会向前一天,您不会得到预期的结果。

【讨论】:

    【解决方案2】:

    JFormattedTextField 接受 Format 对象 - 因此您可以传递通过调用 DateFormat#getTimeInstance() 获得的 DateFormat。您也可以使用 SimpleDateFormatHH:mm:ss 作为格式字符串。

    另请参阅: http://download.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html#format


    如果您不限于使用 JFormattedTextField,您还可以考虑使用自 Java 1.5 起可用的 TimeUnit 类进行自己的格式化,如以下答案所示:How to convert Milliseconds to "X mins, x seconds" in Java?

    【讨论】:

    • @dah 你是否有一个可以使用的基础Date,即你是否有时间开始,比如说,5 分钟完成任务?
    • 不。它仅以十进制分钟记录。
    • 我想我只是将分钟转换为秒到毫秒,然后在日期构造函数中使用它并使用您的方法。
    • @dah 我认为这行不通,您仍然需要一个基本的 Date 对象才能使用 - 从 5 分钟之类的值开始的毫秒数只会给您一个相对于纪元的开始(1970 年 1 月 1 日,格林威治标准时间 00:00:00)。请参阅我编辑的答案,了解如何使用 TimeUnit 类轻松地将其格式化为您想要的方式。
    • 距纪元 5 分钟不等于距 x 5 分钟。
    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多