Calendar cal = Calendar.getInstance();
cal.setTime(date); // your date (java.util.Date)
cal.add(Calendar.MONTH, x); // You can -/+ x months here to go back in history or move forward.
return cal.getTime(); // New date
Run Code Online (Sandbox Code Playgroud)
ref:Java日历
myJavaSqlDate // Object of terrible legacy class `java.sql.Date` that *pretends* to represent a date-only value.\n.toLocalDate() // Convert to modern replacement, `java.time.LocalDate`. \n.withMonth( 3 ) // Swap out month for March while keeping the year and day-of-month.\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 或:
\nmyJavaUtilDate // Object of terrible legacy class `java.util.Date` representing a moment as seen in UTC.\n.toInstant() // Convert to modern replacement, `java.time.Instant`. \n.withZone( // Adjust from UTC (offset of zero) to a specific time zone.\n ZoneId.of( "Africa/Tunis" ) // Real time zone names have format of `Continent/Region`. \n) // Returns a `ZonedDateTime` object.\n.toLocalDate() // Returns a `LocalDate` object.\n.plusMonths( 2 ) // Add two months while trying to keep same day-of-month. Returns another `LocalDate` object rather than altering the first, per immutable objects pattern.\nRun Code Online (Sandbox Code Playgroud)\nLocalDate localDate = LocalDate.of ( 2017, Month.JANUARY, 23 );\nLocalDate localDateFeb = localDate.withMonth ( 2 );\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 或 \xe2\x80\xa6
\nLocalDate localDateFeb = localDate.withMonth ( Month.FEBRUARY.getValue ( ) );\nRun Code Online (Sandbox Code Playgroud)\n\n\nlocalDate.toString(): 2017-01-23
\n
\n\nlocalDateFeb.toString(): 2017-02-23
\n
其他答案使用麻烦的旧日期时间类,现在已被 java.time 类取代。
\njava.sql.Date课堂如果您java.sql.Date手头有一个类,请从那个可怕的遗留类转换为它的现代替代品,java.time.LocalDate. 调用添加到旧类的新to\xe2\x80\xa6/转换方法。from\xe2\x80\xa6
LocalDate localDate = myJavaSqlDate.toLocalDate() ;\nLocalDate later = localDate.plusMonths( 2 ) ; // or `withMonth( 3 )`.\nRun Code Online (Sandbox Code Playgroud)\njava.util.Date课堂如果您java.util.Date手头有一个类,请从那个可怕的遗留类转换为它的现代替代品,java.time.LocalDate. 为了到达那里,我们必须跨越几个障碍。
java.util.Date不管类名如何,对象代表一个时刻,而不是一个日期。我所说的“时刻”是指与 UTC 的偏移量为零时-分-秒的日期。因此,我们需要从这个遗留类转换为它的现代替代品,java.time.Instant. 调用添加到旧类的新to\xe2\x80\xa6/转换方法。from\xe2\x80\xa6
myJavaSqlDate // Object of terrible legacy class `java.sql.Date` that *pretends* to represent a date-only value.\n.toLocalDate() // Convert to modern replacement, `java.time.LocalDate`. \n.withMonth( 3 ) // Swap out month for March while keeping the year and day-of-month.\nRun Code Online (Sandbox Code Playgroud)\n你想要约会。但这里有一个减速带。请注意,对于任何特定时刻,全球各地的日期都会因时区而异。在某个特定时刻,日本东京可能是“明天”,而美国俄亥俄州托莱多仍然是“昨天”。因此,感知特定时刻的日期需要时区。
\n对于时区,请使用 class ZoneId。以、、 或 等格式指定正确的时区名称。切勿使用 2-4 个字母的缩写,例如或,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。Continent/RegionAmerica/MontrealAfrica/CasablancaPacific/AucklandESTIST
myJavaUtilDate // Object of terrible legacy class `java.util.Date` representing a moment as seen in UTC.\n.toInstant() // Convert to modern replacement, `java.time.Instant`. \n.withZone( // Adjust from UTC (offset of zero) to a specific time zone.\n ZoneId.of( "Africa/Tunis" ) // Real time zone names have format of `Continent/Region`. \n) // Returns a `ZonedDateTime` object.\n.toLocalDate() // Returns a `LocalDate` object.\n.plusMonths( 2 ) // Add two months while trying to keep same day-of-month. Returns another `LocalDate` object rather than altering the first, per immutable objects pattern.\nRun Code Online (Sandbox Code Playgroud)\n应用该时区以根据 的 UTC 进行调整Instant。调整结果为ZonedDateTime. 原版Instant和原版ZonedDateTime都代表了同一时刻,时间轴上的同一点,只是它们的挂钟时间不同。
LocalDate localDate = LocalDate.of ( 2017, Month.JANUARY, 23 );\nLocalDate localDateFeb = localDate.withMonth ( 2 );\nRun Code Online (Sandbox Code Playgroud)\n从该特定时区的那一刻(日期和时间)开始,我们只需要您的工作日期。所以提取一个LocalDate对象。并添加或交换您想要的月份。
LocalDate localDateFeb = localDate.withMonth ( Month.FEBRUARY.getValue ( ) );\nRun Code Online (Sandbox Code Playgroud)\njava.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
\nJoda -Time项目现在处于维护模式,建议迁移到java.time类。
\n您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 驱动程序。不需要字符串,不需要类。Hibernate 5 和 JPA 2.2 支持java.time。java.sql.*
从哪里获取 java.time 类?
\n更新:Joda-Time项目现在处于维护模式,团队建议迁移到java.time类。
\nJoda -Time库有一个LocalDate类来表示仅日期,没有时间或时区。
您可以任意设置月份值。但请注意,并非所有月份都有相同的天数,因此当月的日期值为 29、30 和 31 时会出现问题。
\nLocalDate localDate = new LocalDate( 2014 , 12 , 31 ); // December.\nLocalDate localDate_Feb = localDate.withMonthOfYear( 2 ); // February.\nRun Code Online (Sandbox Code Playgroud)\n转储到控制台。
\nSystem.out.println( "localDate: " + localDate );\nSystem.out.println( "localDate_Feb: " + localDate_Feb ); \nRun Code Online (Sandbox Code Playgroud)\n运行时。
\nLocalDate localDate = myJavaSqlDate.toLocalDate() ;\nLocalDate later = localDate.plusMonths( 2 ) ; // or `withMonth( 3 )`.\nRun Code Online (Sandbox Code Playgroud)\n