如何为“添加一天”;“日/月”;java格式
我有一个日期是如何为“添加一天”;“日/月”;java格式,java,date,Java,Date,我有一个日期是dd/mm(15/07)格式的,我需要在此日期上添加一天,因此它将成为16/07 如何在java中以最简单的方式实现这一点?您可以使用日历 String dt = "15-07-2016"; SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); Calendar c = Calendar.getInstance(); c.setTime(sdf.parse(dt)); c.add(Calendar.DATE, 1)
dd/mm
(15/07)
格式的,我需要在此日期上添加一天,因此它将成为16/07
如何在java中以最简单的方式实现这一点?您可以使用日历
String dt = "15-07-2016";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime());
您可以这样做:
public String addDay(String date) {
String[] dateSplit = date.split("/");
String day = "" + (Integer.parseInt(dateSplit[0]) + 1);
return day + "/" + dateSplit[1];
}
但这并不是一个很好的解决方案,因为它不处理月或年交换(您可以使用%运算符自己添加)
或者使用SimpleDataFormat,如下所示:java.time
这是正确的,但过时了
该框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,如java.util.date
,.Calendar
,&java.text.SimpleDateFormat
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释
大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android
MonthDay
time类包括表示一个月+一天的类,不含年份和时区
String input = "15/07";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM" );
MonthDay monthDay = MonthDay.parse( input , formatter );
2月28日无法增加
正如汤姆所评论的,你不能可靠地增加2月28日。在大多数年份,你会得到3月1日,但在2月29日。这就是为什么YearMonth
类缺少任何addDays
方法的原因
因此,您需要(a)假设/提供一年,(b)拒绝增加2月28日的一天,或(c)从2月28日任意增加到3月1日,以忽略任何可能的29日
让我们看一下第一个选项,提供一年
要获取当前年份,我们需要当前日期。要获取当前日期,请指定时区。在任何一个特定的时刻,世界各地的日期都因地区而异
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zoneId );
int year = today.getYear();
我们可以应用该年数将YearMonth
更改为LocalDate
。从那里开始,LocalDate::plusDays
方法递增到第二天。从LocalDate
的结果实例中,我们提取一个YearMonth
对象
LocalDate ld = monthYear.atYear( year );
LocalDate nextDay = ld.plusDays( 1 );
YearMonth ymNextDay = MonthDay.from( nextDay );
只是一个字符串或某个日期类型的类?它是一个字符串,我需要一个日期增加的字符串。您应该将其转换为日期时间类型,以便处理闰年等,然后返回字符串。如果您只有日期和月份,那么您应该知道结果可能不正确。例如:
28/02
的正确结果是什么?是29/02
还是01/03
?或者说,日期和月份总是“今年”吗?@Tom是绝对正确的,这也是为什么像java.time.MonthDay
这样的类不扩展Temporal
的原因,例如,意思是不提供任何添加日期的机会。