2016-04-29 80 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); 

如果你有更多的问题,那么你应该编辑和重写。