Java 我正在尝试计算两个日期对象之间的休息天数

Java 我正在尝试计算两个日期对象之间的休息天数,java,Java,我试图计算从今天到上周的天数和周数,但我总是得到-3作为周数。我不知道我做错了什么。 提前谢谢。你的周数是-3,因为你已经把它注释掉了,所以它显示了一些随机值。还要注意,8表示9月份而不是8月份,因为月份是以0为基础的 因此,如果您的目标是8月,那么您可以尝试以下方法: public static int countWeeks() { // setting dates Calendar calStart = GregorianCalendar.getInstance();

我试图计算从今天到上周的天数和周数,但我总是得到-3作为周数。我不知道我做错了什么。
提前谢谢。

你的周数是-3,因为你已经把它注释掉了,所以它显示了一些随机值。还要注意,8表示9月份而不是8月份,因为月份是以0为基础的

因此,如果您的目标是8月,那么您可以尝试以下方法:

public static int countWeeks() {
    // setting dates
    Calendar calStart = GregorianCalendar.getInstance();
    calStart.set(2014, 8, 30);
    Date dateStart = calStart.getTime();

    Date dateEnd = new Date();

    // count days and weeks
    int diffInDays = Days.daysBetween(new DateTime(dateStart), new DateTime(dateEnd)).getDays(); //         int weekNumber = (int) diffInDays / 7;

    return weekNumber;

}

首先,我假设

calStart.set(2014, 7, 30);
                   ^^-- This represents August month
未注释,否则将出现编译错误

现在,正如我在评论中解释的那样

int weekNumber = (int) diffInDays / 7;
您将日期设置为setember的末尾,而不是8月底。所以,现在比现在提前3周,所以你会得到一个
-3
。使用
日历
常量

calStart.set(2014, 8, 30);

您将起始日期设置为9月30日,因为该月为零基数

请参阅java.util.Calendar中的文档:

公共最终无效集(整数年, 整月, int date)设置日历字段“年”、“月”和“月中的日”的值。其他日历字段的先前值为 保留。如果不需要,请首先调用clear()。参数:年份 -用于设置“年度日历”字段的值。月-用于设置月日历字段的值。月份值以0为基础。e、 g.,0 一月份。日期-用于设置日历中的日期的值 领域另见:


如果您使用的是Java 8,则可以使用Java时间API:

calStart.set(2014, Calendar.AUGUST, 30);

这是什么
课?如果它是JodaTime,您应该解释它,因为它不是javaapi的一部分
int weekNumber
被注释掉了吗?那么,
weekNumber
在哪里声明呢?另外,请记住日历中的月份是以0为基础的,所以实际上您将开始时间设置为setember,30。最好使用日历。八月。获取毫秒,从开始减去结束。除以1000*60*60*24。如果代码被注释,他会得到一个编译错误…@SJuan76:-是的,这是有道理的。那么问题可能出在月份上,因为gettime()将获得当前日期,而8是9月,而不是8月,我猜OP在想:)周号确实没有被禁止评论xd它现在工作得很好谢谢:p
LocalDate start = LocalDate.of(2014, 8, 30);
LocalDate end = LocalDate.now();
long days = ChronoUnit.DAYS.between(start, end);
return (int) days / 7;