日历类:从现在开始设置为十天

时间:2012-06-11 18:24:51

标签: java calendar

我有以下两种方法:

private long getTimeInMilliseconds()
    {
        Calendar c = Calendar.getInstance();


        if(c.get(Calendar.DAY_OF_MONTH) == 21)  
        {
            c.set(Calendar.MONTH, Calendar.MONTH + 1 );
            c.set(Calendar.DAY_OF_MONTH, 1);
        }
        else
            c.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH + 10);

        if(c.get(Calendar.MONTH) > 11)
            c.set(Calendar.MONTH, 0);

        return c.getTimeInMillis();
    }

public static void remainingTime(L2PcInstance player)
    {
        long now = System.currentTimeMillis();
        long then = player.getExpBoostTime();

        long time = then - now;

        int hours = (int) (time / 3600000);

        player.sendMessage(hours+ " hours remaining until your EXP BOOST PERIOD ends");
    }

我希望getTimeInMillisSeconds()在10天后返回时间。我希望remainingTime()显示剩余的天数(以小时为单位)。

使用上面的代码,它显示剩余4天而不是10天。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您在set()方法中犯了错误。

应该是

c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 10);

然而,你的方法远非最好。在另一个答案中提出的建议(在当前时间增加10 * 24 * 60 * 60 * 1000毫秒)是更好的恕我直言。

答案 1 :(得分:1)

“从现在起十天”的最佳方法是使用时间戳/毫秒。

您可以从以下日历中获取当前时间(以毫秒为单位):

Calendar someCalendar = new Calendar();
long someTimestamp = someCalendar.getTimeInMillis();

一旦你得到它,你可以添加十天(再次以毫秒为单位):

long tenDays = 1000 * 60 * 60 * 24 * 10;
long tenDaysFromNow = someTimestamp + tenDays;