我正在尝试格式化时间,以便用户可以输入时间。
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类型吗?我将如何格式化用户输入?
答案 0 :(得分: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 doc来学习如何设置格式: http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
答案 1 :(得分:2)
SimpleDateFormat对您来说可能很方便:
tf = new java.text.SimpleDateFormat ("h:mm a")
您可以使用它来解析时间:
Date d = tf.parse (textfield.getText ());
反过来,以这种格式输出日期/时间:
System.out.println ("Time: " + tf.fomat (date));
答案 2 :(得分:1)
首先,您应该始终检查JOptionPane的结果,以确保用户实际输入的内容并没有点击取消。
其次,如果你知道你希望用户如何输入时间,你需要(a)告诉他们如何输入它(b)使用SimpleDateFormat来解析它
答案 3 :(得分:0)
其他答案是正确但过时的。
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
。 Joda-Time团队还建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的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
/ setObject
直接使用getObject
对象。
如果没有,请使用添加到旧类的新方法转换为旧的java.sql类型。在这种情况下,java.sql.Time
。
java.sql.Time t = java.sql.Time.valueOf( localTime );
......和另一个方向......
LocalTime localTime = t.toLocalTime();