2012-04-26 116 views
2

我想格式化时间,以便用户可以输入时间。Java日期和时间格式化

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

有没有这样做的代码上面的方法?

我试图改变的开始时间在预订类为Timestamp 并在主尝试使用此代码:

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

但我很难环绕它我的头。我想要做的就是让用户输入一个短时间的时间,例如上午7:20。然后我可以使用这段时间与SQL数据库进行比较。

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

回答

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); 

在未来,你可以参考Java文档的SimpleDateFormat学习如何设置格式: http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

+0

我认为这仍然是不正确的......你忘词了符号AM/PM – ControlAltDel 2012-04-26 18:05:23

+0

@ user1291492噢...添加它现在。 – Ozzy 2012-04-26 18:08:28

+1

sdf.parse返回一个Date,不需要在这里施放任何东西。 – 2012-04-26 18:14:48

1

首先,您应经常检查的JOptionPane的结果,以确保用户实际上进入了一些东西,没有点击取消。

第二,如果你知道你是怎么想你的用户输入的时候,你需要(一)告诉他们如何输入(B)使用的SimpleDateFormat解析它

2

SimpleDateFormat的可能是方便您:

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

你可以用它来解析时间:

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

,并反过来,输出的日期/时间格式为:

System.out.println ("Time: " + tf.fomat (date)); 
+0

如果你这样做:Date d = tf.parse(textfield.getText()),你可能会得到NullPointerException,IllegalArgumentException。你永远不应该这样做!输入必须进行消毒处理,否则必须使用try-catch块来处理异常。 – Ozzy 2012-04-26 18:12:02

+1

@Ozzy:是的,Ozzy,但我想这不是关键。 – 2012-04-26 18:13:43

+0

这是错误的代码...你不能教别人写这样的代码。 – Ozzy 2012-04-26 18:14:11

0

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

java.time

java.time框架是建立在Java 8和更高版本。这些课程取代了老的麻烦日期时间课程,如java.util.Date,.Calendar,& java.text.SimpleDateFormatJoda-Time团队还建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。

许多java.time功能被移植到Java中,并在ThreeTen-Backport中被移植到Java中,并进一步适用于Android中的ThreeTenABP

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或更高版本,以符合通过setObject/getObject直接使用LocalTime对象。

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

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

...和另一个方向......

LocalTime localTime = t.toLocalTime();