Java 简化格式。返回错误日期的格式

Java 简化格式。返回错误日期的格式,java,date,format,simpledateformat,Java,Date,Format,Simpledateformat,我有这个代码,我想知道为什么它返回正确的日期 Festival f= (Festival) festival.get(0); Date d=f.getSDate(); System.out.println(d.getYear()); System.out.println(d.getMonth()); System.out.println(d.getDate()); SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); // d

我有这个代码,我想知道为什么它返回正确的日期

Festival f= (Festival) festival.get(0);
Date d=f.getSDate();


System.out.println(d.getYear());
System.out.println(d.getMonth());
System.out.println(d.getDate());


SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); // define your format.
String formattedDate = df.format(d);
System.out.println("New Date To Show::"+formattedDate);
输出是这样的

2019
2
27
New Date To Show::27/03/3919
这是因为月份(d.getMonth())从零开始,2实际上是3

   Date date=new Date(); 
   // you can assign your return from the function here



    LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    System.out.println(localDate.getMonthValue());
    System.out.println(localDate.getDayOfMonth());
    System.out.println(localDate.getYear());


    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    String formattedDate = df.format(date);
    System.out.println("New Date To Show::"+formattedDate);

这是因为月份(d.getMonth())从零开始,2实际上是3I。请发布可复制的版本。月份以日期为基础,年份以1900年为基础。您似乎创建的日期不正确。如前所述:月份以0为基础,因此您的两个输出都是正确的。但是您使用的类已经过时了,因此您应该转而使用新的替代方法:不仅
Date
类已经过时,而且
getXx
方法也被正式弃用。不要使用
Date
,即使使用,也一定要避免使用不推荐的方法。此外,您似乎从
f.getSDate()
中得到了错误的一天。我建议您使用java.time中的
LocalDate
DateTimeFormatter
,忘记
Date
SimpleDateFormat
。我保证,它将消除所有的混乱。进一步的细节如下:一方面,它不能解决
f.getSDate()
返回3919年日期的问题。另一方面,我们没有任何信息可以帮助询问者解决上述问题(除了将方法的返回类型更改为
LocalDate
)。另外,我还需要执行这一步骤,并使用
DateTimeFormatter
格式化
LocalDate
。f.getSDate()返回一个日期类型对象(如问题所示)。您可以在我共享的代码上替换相同的值,并使用所需的操作继续。它仍然返回年份3919并更改月份值:(它必须更改月份值(否则会出错)。三月在
Date
中为2,在
LocalDate
中为3,因此它从2更改为3。您的问题是从
f.getSDate()
@Ahmed>中获取错误的
日期