2

我正在尝试格式化时间,以便用户可以输入时间。

 b1.setStartTime(JOptionPane.showInputDialog("Enter Start time for Booking: "));

有没有办法为上面的代码做到这一点?

我尝试将预订类中的 startTime 更改为时间戳,并且主要尝试使用此代码:

DateFormat timeFormatter =
    DateFormat.getTimeInstance(DateFormat.SHORT, b1.getStartTime());

但我很难把头绕过去。我想要做的就是允许用户输入时间作为简短版本,例如上午 7:20。然后我可以利用这段时间与 SQL 数据库进行比较。

对我来说, DateFormat.getTimeInstance() 似乎是要走的路。如果我要使用它,预订类中的 startTime 应该是 Date 类型,我将如何格式化用户输入?

4

4 回答 4

2
String datetime = [code to get time string];
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
Date date = (Date) sdf.parse(datetime);

以后,您可以参考 SimpleDateFormat 的 java 文档来了解如何设置格式: http ://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

于 2012-04-26T18:03:39.127 回答
2

SimpleDateFormat 可能对您很方便:

 tf = new java.text.SimpleDateFormat ("h:mm a") 

您可以使用它来解析时间:

 Date d = tf.parse (textfield.getText ());

反之,以这种格式输出日期/时间:

 System.out.println ("Time: " + tf.fomat (date)); 
于 2012-04-26T18:10:23.513 回答
1

首先,您应该始终检查 JOptionPane 的结果,以确保用户确实输入了某些内容并且没有单击取消。

其次,如果你知道你希望你的用户如何输入时间,你需要(a)告诉他们如何输入它(b)使用 SimpleDateFormat 来解析它

于 2012-04-26T18:04:32.023 回答
0

其他答案是正确的,但已过时。

java.time

java.time框架内置于 Java 8 及更高版本中这些类取代了旧的麻烦的日期时间类,例如java.util.Date, .Calendar, & java.text.SimpleDateFormatJoda-Time团队还建议迁移到 java.time 。

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。

许多 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP进一步适应 Android 。

LocalTime

该类LocalTime表示没有日期和时区的一天中的时间。

定义格式模式。此处看到的模式适用于 12 小时制,预计小时值为 1-12。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "h:m a" );

使用该格式化程序进行解析。

String input = "7:20 AM";
LocalTime localTime = LocalTime.parse( input , f );

当然,您还应该清理您的数据输入并添加代码以捕获由于无效输入而引发的任何异常。为简洁起见,此处省略了此类代码。

数据库

要查询数据库,如果您的 JDBC 驱动程序符合JDBC 4.2或更高版本,您可以直接通过/使用该LocalTime对象。setObjectgetObject

如果不是,请使用添加到旧类的新方法转换为旧 java.sql 类型。在这种情况下,java.sql.Time

java.sql.Time t = java.sql.Time.valueOf( localTime );

……还有另一个方向……</p>

LocalTime localTime = t.toLocalTime();
于 2016-08-09T00:30:53.537 回答