2016-04-29 69 views
0

在我的程序中,我有一個訪問按鈕,允許用戶查看工程師登錄到服務器的次數。該按鈕應顯示工程師登錄的不同日期和時間。但顯示的日期和時間與首次登錄服務器時的日期和時間相同。任何援助都會有所幫助。訪問按鈕不顯示不同的日期和時間

代碼:

public String visits(String myCookie){ 
     if(numberOfVisits == 0){ 
      return "Engineer has not visited this machine"; 
     }else if(myCookie.equals(storedCookie)){ 
      for(int i = 0; i < numberOfVisits; i++){ 
      System.out.println("Engineer has visited on these dates: " + dateFormat.format(storedDate)); 
      } 
      return storedCookie; 
     }else{ 
      for(int i = 0; i < numberOfVisits; i++){ 
       System.out.println("Engineer has visited on these date: " + dateFormat.format(storedDate)); 
      } 
      return ""; 
     } 
    } 
+1

您應該只發布與問題有關的代碼的相關部分。人們不希望篩選整個程序來嘗試找到你所指的部分。 –

+0

更新了帖子。 – iiAaronXiX

回答

0

你的邏輯必須配合好你會得到什麼作爲參數,我建議改變你檢查什麼的順序,所以你的分支機構會更清楚,更容易執行:

public String visits(String myCookie){ 
     if(myCookie.equals(storedCookie)){ 
      if(numberOfVisits == 0) 
        return "Engineer has not visited this machine"; 
      for(int i = 0; i < numberOfVisits; i++){ 
       System.out.println("Engineer has visited on these dates: " + dateFormat.format(storedDate)); 
      } 
      return storedCookie; 
     } 
    return ""; 
    } 

我不知道這個storedDate變量 但在這裏: System.out.println(「工程師已在這些日期訪問:」+ dateFormat.format(storedDate)); 是要打印相同的日期......

你應該有一些陣列,並與指數

System.out.println("Engineer has visited on these dates: " + dateFormat.format(storedDate[i])); 
+0

此解決方案無法正常工作,因爲我無法在用戶註銷時打印訪問,並且它仍顯示與用戶首次登錄時的日期相同的日期。 '工程師在這些日期訪問過:29/04/2016 19:55 工程師已在這些日期訪問:29/04/2016 19:55 工程師已在這些日期訪問:29/04/2016 19:55' – iiAaronXiX

+0

是... beacuse是相同的...是在一些array ??? –

0

你的問題並不清楚明白。

您似乎要求收集一個人登錄的日期。因此,您需要爲每個用戶保留一個收集對象。不確定您是否想要僅限日期或日期時間;我會和日期一起去。

我們將使用一個List來保持它們在發生時的時間順序。

我們將使用Instant類,UTC時間軸上的片刻,分辨率爲納秒。作爲Java 8及更高版本內置的java.time框架的一部分。

List<Instant> logins = new ArrayList<>(); 

當該用戶登錄時,添加當前時刻。

logins.add(Instant.now()); 

當你想顯示那些收集的值,只是循環。 toString方法默認生成標準ISO 8601格式的字符串。

System.out.println("You logged in at these date-times:"); 
for(Instant instant:logins) { 
    String output = instant.toString(); 
    System.out.println(output); 
} 

您可以將time zone調整到wall-clock time用戶期望。

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 

要使用其他格式,請參閱java.time.format包。你甚至可以讓java.time自動爲你輸出本地化的輸出。指定人類語言的Locale以翻譯日/月的名稱以及句號對逗號的文化規範等。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); 
formatter = formatter.withLocale(Locale.CANADA_FRENCH); 

在循環中使用該格式化程序。

String output = zdt.format(formatter); 

如果你有更多的問題,那麼你應該編輯和重寫。