访问按钮不显示不同的日期和时间

时间:2016-04-29 18:23:20

标签: java date time

在我的程序中,我有一个访问按钮,允许用户查看工程师登录服务器的次数。该按钮应显示工程师登录的不同日期和时间。但是它显示与工程师第一次登录服务器时相同的日期和时间。任何帮助都会有所帮助。

代码:

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 "";
        }
    }

2 个答案:

答案 0 :(得分: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(&#34;工程师在这些日期访问过:&#34; + dateFormat.format(storedDate)); 将打印相同的日期......

你应该在某个数组中使用索引

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

答案 1 :(得分: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 );

如果您对问题有更多了解,那么您应该编辑并重写。