Java 我想在实际月份的1号之前得到星期一的日期

Java 我想在实际月份的1号之前得到星期一的日期,java,dayofweek,java.util.calendar,Java,Dayofweek,Java.util.calendar,当我使用日历库时,Java不会执行我的一些代码行 我想在实际月份的1号之前得到星期一的日期 //Today is Tuesday, 2 January of 2019 (29/01/2019) Calendar cp1 = GregorianCalendar.getInstance(); cp1.set(Calendar.DAY_OF_MONTH, 1); //THIS LINE DON'T WORKS cp1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY

当我使用日历库时,Java不会执行我的一些代码行

我想在实际月份的1号之前得到星期一的日期

//Today is Tuesday, 2 January of 2019 (29/01/2019)

Calendar cp1 = GregorianCalendar.getInstance();
cp1.set(Calendar.DAY_OF_MONTH, 1); //THIS LINE DON'T WORKS
cp1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
SimpleDateFormat sdf=new SimpleDateFormat ("dd/MM/yyyy");
System.out.println(sdf.format (cp1.getTime()));
//返回2019年1月28日,而不是2018年12月31日

如果我在第2行之后添加System.out.printlncp1,java就不会跳转到第2行,并且运行良好

//Today is Tuesday, 2 January of 2019 (29/01/2019)

Calendar cp1 = GregorianCalendar.getInstance();
cp1.set(Calendar.DAY_OF_MONTH, 1); //THIS LINE WORKS NOW
System.out.println (cp1.getTime());
cp1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
SimpleDateFormat sdf=new SimpleDateFormat ("dd/MM/yyyy");
System.out.println(sdf.format (cp1.getTime())); 
//返回2018年12月31日的正确日期

//为什么java没有在我的第一段代码中执行第二行?是java bug吗

预期结果2018年12月31日。
实际结果2019年1月28日。

我强烈建议使用java.time,因为它更容易处理

使用在类中找到的实现。为所需的星期几传递枚举对象

LocalDate now = LocalDate.now();
LocalDate mondayBefore1OfMonth = now.withDayOfMonth(1)
                                    .with(TemporalAdjusters.previous(DayOfWeek.MONDAY));

System.out.println(mondayBefore1OfMonth); // 2018-12-31
对于您的问题,可复制为
,似乎如果不调用私有方法ComputeTime,则通过调用.getTime或.getCalendar.DAY\u OF_MONTH,将覆盖Calendar.DAY\u OF_MONTH字段或类似的内容,它将更新日期,并获得良好的结果

我运行了代码的第二部分,对我来说,它还返回2019年1月28日。我还建议你编辑你的问题,试着更好地表达你的意思,我想在实际的一个月之前得到星期一的日期。对不起,我没有。对于我,代码的第一部分返回2019年1月28日,第二部分返回2018年12月31日。然而,2019年1月28日是错误的。正确的结果是2018年12月31日。为什么java不执行第二行?2019-01-282018-12-31都是星期一。您的月日被星期一覆盖。如果您想要12/31,则应将月份设置为12月和第5周。2018年12月31日是正确的日期。不可复制,我建议您再次测试,这两个sameMy java代码在92个包中都有1046个java类。这对我来说很难改变。我已经使用这个图书馆很多年了。我不明白为什么现在失败了。@Hammerin87你在多个地方都得到了这个?不,只有在我的电脑里。等等,我会上传一个视频。现在检查一下。ideone.com/a5Tq6I@Hammerin87是的,是的,用我理解的更新了我的帖子,但不知道更多