将日期增加一天,但同时又将月份减少1

我制作了一个函数,该函数应该在解析的日期字符串中增加一天,它就像一种魅力一样工作,只是它每个函数调用将月份减少一个值。我不知道为什么要这样递减,我只想增加一天。

这是fx:

private void setTarikh() throws ParseException {
    FragmentJadual parentFragment = (FragmentJadual) getParentFragment();
    int lastTarikh = parentFragment.hariArray.size() - 1;
    String tarikhNewData = parentFragment.hariArray.get(lastTarikh).getTarikhHari();
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd / MM / yyyy");
    Date d = dateFormat.parse(tarikhNewData);
    Calendar calender = Calendar.getInstance();
    calender.setTime(d);
    calender.add(Calendar.DATE,1);
    SimpleDateFormat sdf1 = new SimpleDateFormat("dd / MM / yyyy");
    String output = sdf1.format(calender.getTime());
    mNewDay = calender.get(Calendar.DAY_OF_MONTH);
    mNewMonth = calender.get(Calendar.MONTH);
    mNewYear = calender.get(Calendar.YEAR);
    mTarikhTv.setText("" + mNewDay + " / " + mNewMonth + " / " + mNewYear);
}

我真的试图查看其他有问题的功能,但是我什至找不到提示。请帮助,至少要确认此功能本身是正确的。我讨厌虫子,但同时也爱它们。.

ananhehe 回答:将日期增加一天,但同时又将月份减少1

tl; dr

LocalDate
.parse(
    "23/01/2020",DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
.plusDays( 1 ) 
.toString()
  

2020-01-24

避免使用旧的日期时间类

正如其他人所说,您可能的问题是Calendar类使用的疯狂计数,从1月到12月的0-11个月。 从不使用Calendar 类的许多原因之一。

几年前,业界领先的 java.time 类取代了与最早的Java版本捆绑在一起的可怕的日期时间类。

java.time

要解析以{-{1}}字符分隔的日-月-年格式的字符串,请使用/类定义格式,并解析为DateTimeFormatter。 / p>

LocalDate
  

ld.toString():2020-01-23

添加您的日增量。

String input = "23/01/2020" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input,f ) ;
  

dayAfter.toString():2020-01-24

关于堆栈溢出,已经有很多次对此进行了讨论。因此,搜索以了解更多信息。


Table of all date-time types in Java,both modern and legacy


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要LocalDate dayAfter = ld.plusDays( 1 ) ; 类。

在哪里获取java.time类?

Table of which java.time library to use with which version of Java or Android.

,

代替

mTarikhTv.setText("" + mNewDay + " / " + mNewMonth + " / " + mNewYear);

使用

mTarikhTv.setText(output);

除此之外,这不是问题或错误,而是正常现象。如果您尝试查看Calendar类,您会发现Month从0-11开始,表示0-JANUARY和11-DECEMBER。

System.out.println(Calendar.MARCH);
Output: 2 // Instead of 3
本文链接:https://www.f2er.com/3157533.html

大家都在问