在Spigot我正在创建一个每日奖励插件,我需要存储用户连续登录的天数,但我的主要麻烦是System.currentTimeMillis()。我想创建一个显示小时和分钟的服务器时间。当它达到设定的时间,如凌晨1点或5点或如果玩家加入,他们已经登录了第二天(以及他们是否在线)。我要补充的另一件事是,如果用户在半小时内保持在线状态,他们会获得奖励,然后如果他们在网上停留约1小时获得更大的奖励,则会逐渐增加。每次服务器重新启动时System.currentTimeMillis()都会重新启动吗?我该怎么办呢?
由于System.currentTimeMillis()的javadoc表示它返回当前时间与UTC时间1970年1月1日午夜之间的差异(以毫秒为单位)。
所以答案是不,每次服务器重启时都不会重启。
System.currentTimeMillis()只会在任何时刻为您提供当前的系统时间。我想您的用例是基于每个用户来衡量登录持续时间。我希望在每个用户会话对象中维护它。
您可能想使用GregorianCalendar来解码日期:
Calendar calendar = new GregorianCalendar(); // arguments allow to set time zone
// one of them:
calendar.setTime(new Date());
calendar.setTimeInMillis(System.currentTimeMillis());
System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
System.out.println("HOUR: " + calendar.get(Calendar.HOUR));