2017-02-16 170 views
0

我的項目提示用戶輸入形式爲hh:mm的字符串。 那麼我就需要了......分開:毫米到小時和分鐘,我覺得我做Java混淆hh:mm

String Hour = string.substring(0,2); 
String Minutes = string.substring(3,5); 

現在我需要確保小時爲5 < =小時但我不能做一個字符串的平等,所以我用parseInt將其轉換爲一個int,並做到平等。但它會丟棄我需要保留在我的代碼中的前導零。

我如何去這樣做

+3

Javascript!= Java。 (我已經爲你解決了問題標籤。) – nnnnnn

+0

什麼是示例輸入,可以與我們分享? – FreedomPride

+0

如果您在平等使用後以字符串格式使用此數據,最簡單的方法是在小於10的小時和分鐘內添加「0」。 – Rahul

回答

0

試着看一下Simple Date Format

String input= "05:00"; 
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); 
Date date = sdf.parse(input); 
+0

不幸的是,im Java新手,還沒有學到這一點 – Survivorr

+1

*現在我需要確保小時是從5 <=小時<22. * - 不回答 –

+1

麻煩的舊日期時間類,如['java。 util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html),['java.util.Calendar'](https://docs.oracle.com .com/javase/8/docs/api/java/util/Date.html)和'java.text.SimpleTextFormat'現在是[legacy](https://en.wikipedia.org/wiki/Legacy_system),代替通過[java.time](https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)類。 –

0

至於你問parseInt嘗試

String line = "23:59"; 

    String arr [] = line.split(":"); 
    if (Integer.parseInt(arr[0]) < 5 || Integer.parseInt(arr[0]) >= 22) { 
     System.out.println("wrong hour"); 
    } 
0

String::split

一般來說,對於分割字符串成零件,請使用String::split命令。有關詳情,請參閱問題How to split a string in Java

String[] parts = "07:11".split(":"); 

Arrays.toString(部分):[07,11]

但我不建議你的情況這種做法。請繼續閱讀。

LocalTime

Java提供了一個專用的類你:LocalTime。這門課表示沒有日期而沒有時區的時間。時鐘是一個通用的24小時通用日,它忽略了諸如Daylight Saving Time (DST)之類的異常情況。

您的輸入如07:11恰好符合標準ISO 8601的格式。在解析或生成表示日期時間值的字符串時,java.time類默認使用這些格式。所以不需要指定格式化模式。

LocalTime localTime = LocalTime.parse("07:11"); 

從那裏你可以詢問小時部分或分鐘部分。

int hourOfDay = localTime.getHour(); 
int minuteOfHour = localTime.getMinute(); 

但你真正的目標是進行比較的時候,看它是否是上午5點和晚上10點之間。例如,這是真的:5 AM < 07:11 < 10 PM。所以不需要把時間撕成碎片。相反,請使用LocalTime類更直接地進行比較,並以更自我記錄的方式進行比較。

LocalTime start = LocalTime.of(5 , 0); // 5 AM = 05:00. 
LocalTime stop = LocalTime.of(22 , 0); // 10 PM = 22:00. 

Boolean isBetween = 
    (! localTime.isBefore(start)) 
    && 
    localTime.isBefore(stop) 
; 

看到這個code run live at IdeOne.com

關於比較聲明:

  • 第一部分詢問「是我們的目標要麼正好在啓動或啓動後?」。問一個簡短的方法是,「我們的目標是而不是開始之前?」。如果「不在之前」,那麼邏輯上它必須完全在或之後。
  • 第二部分詢問我們的目標是否在停止之前,而不是「等於或之前」。這意味着我們正在使用Half-Open方法來定義一段時間。在半開放時,開始是,包括,而結尾是,獨家。這通常用於日期時間工作。我相信,在整個代碼庫和業務邏輯中始終如一地使用它可以消除由時間跨度引起的大部分混亂和模糊性。