【问题标题】:Visit button not displaying different dates and times访问按钮不显示不同的日期和时间
【发布时间】:2016-04-29 18:23:19
【问题描述】:

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

代码:

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

【问题讨论】:

  • 您应该只发布与问题相关的代码部分。人们不会想要筛选您的整个程序来尝试找到您所指的部分。

标签: java date time


【解决方案1】:

你的逻辑必须与你作为参数得到的一致我建议改变你检查的顺序,这样你的分支会更清晰,更容易执行:

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]));

【讨论】:

  • 这个解决方案不起作用,因为当用户退出时我无法再打印访问,它仍然显示与用户首次登录时相同的日期。Engineer has visited on these dates: 29/04/2016 19:55 Engineer has visited on these dates: 29/04/2016 19:55 Engineer has visited on these dates: 29/04/2016 19:55
【解决方案2】:

你的问题不清楚。

您似乎要求收集某人登录的日期。因此您需要为每个用户保留一个收集对象。不确定您是否想要仅日期或日期时间;我会选择日期时间。

我们将使用List 将它们按时间顺序排列。

我们将使用Instant 类,UTC 时间轴上的一个时刻,分辨率为纳秒。 Java 8 及更高版本中内置的java.time 框架的一部分。

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

当该用户登录时,添加当前时刻。

logins.add( Instant.now() );

当你想显示那些收集的值时,只需循环。 toString 方法默认生成标准ISO 8601 格式的String。

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 );

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2015-06-12
    • 2018-09-07
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多