Java 日历类:设置为从现在起十天

Java 日历类:设置为从现在起十天,java,calendar,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_M

我有以下两种方法:

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天

有人能帮忙吗?

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

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

Calendar someCalendar = new Calendar();
long someTimestamp = someCalendar.getTimeInMillis();
一旦你得到了它,你可以再加上十天(同样以毫秒为单位):

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

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

Calendar someCalendar = new Calendar();
long someTimestamp = someCalendar.getTimeInMillis();
一旦你得到了它,你可以再加上十天(同样以毫秒为单位):


您在
set()
方法中出错

应该是

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

然而,你的方法远不是最好的。另一个答案中建议的方法(在当前时间的基础上增加10*24*60*60*1000毫秒)比IMHO好得多。

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

应该是

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

然而,你的方法远不是最好的。另一个答案中的建议(在当前时间的基础上增加10*24*60*60*1000毫秒)比IMHO好得多。

没有检查整个代码,但是您的行c.set(Calendar.MONTH,Calendar.MONTH+1);始终被以下内容覆盖。此外,您正在将月份设置为每月的常量alendar.DAY加1的值,而不是当前月份加1的值。后者对else部分有效(加10,而不是加1)。没有检查整个代码,但是您的行c.set(Calendar.MONTH,Calendar.MONTH+1);始终被以下内容覆盖。此外,您正在将月份设置为每月的常量alendar.DAY加1的值,而不是当前月份加1的值。后者对else部分有效(加10,而不是加1)。虽然确实可以使用乘法将天转换为毫秒,但我建议使用java.util.concurrent.TimeUnit和方法toMilis()、toSeconds()等——这样代码看起来更可读,而且您不必担心计算。这只是一个建议。虽然确实可以使用乘法将天转换为毫秒,但我建议使用java.util.concurrent.TimeUnit和方法toMilis()、toSeconds()等——这样代码看起来更可读,而且您不必担心计算。只是一个建议。谢谢兄弟!问题是:c.set(Calendar.DAY\u OF_MONTH,c.get(Calendar.DAY\u OF_MONTH)+10)@user1449638如果您保持这种方法,您将需要修复
c.set(Calendar.MONTH,Calendar.MONTH+1)
哪个应该是
c.set(Calendar.MONTH,c.get(Calendar.MONTH)+1)然后谢谢兄弟!问题是:c.set(Calendar.DAY\u OF_MONTH,c.get(Calendar.DAY\u OF_MONTH)+10)@user1449638如果您保持这种方法,您将需要修复
c.set(Calendar.MONTH,Calendar.MONTH+1)
哪个应该是
c.set(Calendar.MONTH,c.get(Calendar.MONTH)+1)然后