2012-04-26 115 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();