Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为“添加一天”;“日/月”;java格式_Java_Date - Fatal编程技术网

如何为“添加一天”;“日/月”;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
的原因,例如,意思是不提供任何添加日期的机会。