2011-02-01 28 views
0

我有一個包含HH的窗口:在它毫米時間文本字段,在24小時格式如何驗證來自Swing文本框的小時和分鐘?

我需要驗證,如果用戶輸入任何非有效的小時數,如28:00,99:00,24 :01。

什麼是最好和更簡單的方法來做到這一點?

下面的一些代碼是什麼目前正在做的工作錯誤,並在日期解析錯誤。 今天我得到一個隨機小時,用戶在該文本字段中打99:99。

此代碼不是我的,但我得解決它。

我一直堅持使用它,試圖驗證爲一個字符串是無用的,我無法找到一個很好的方式使它成爲一個日期,而不必把年,月等等。

請忘記返回-1而不是拋出一個異常,這是舊的代碼,這是不能改變的。

,以幫助理解:
Statics.hF2 = SimpleDateFormat的(HH:MM)
this.cmpHora.getText()=與值
Statics.df_ddmmyy領域=另一日期格式
Statics.m2ms =轉換分鐘毫秒

// CODE

public long getDataEmLong() 
{ 
    try 
    { 
     Calendar hour= Calendar.getInstance(); 
     new GregorianCalendar(). 
     hour.setTime(Statics.hF2.parse(this.cmpHora.getText())); 
     return Statics.df_ddmmyy.parse(this.cmpData.getText()).getTime() + Statics.m2ms(hour.get(Calendar.HOUR_OF_DAY) * 60) + Statics.m2ms(hour.get(Calendar.MINUTE)); 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
     return -1; 
    } 

} 

乾杯!

回答

3

將此插入到您的班級中,並從垃圾代碼中執行validateTime方法。

public boolean validateTime(String timeString) { 
    if (timeString.length() != 5) return false; 
    if (!timeString.substring(2, 3).equals(":")) return false; 
    int hour = validateNumber(timeString.substring(0, 2)); 
    int minute = validateNumber(timeString.substring(3)); 
    if (hour < 0 || hour >= 24) return false; 
    if (minute < 0 || minute >= 60) return false; 
    return true; 
} 

public int validateNumber(String numberString) { 
    try { 
     int number = Integer.valueOf(numberString); 
     return number; 
    } catch (NumberFormatException e) { 
     return -1; 
    } 
} 
+0

你的`validateNumber()`函數被破壞了。如果傳入「-1」,結果將與錯誤情況相同。這不是您使用它的方式的問題,但如果沒有更好的名稱或文檔,可能會在將來導致問題。 – unholysampler 2011-02-01 19:04:51

0

您可以使用適當的日期或時間格式設置的JFormattedTextField。該字段將返回適當的值。